Imported Upstream version 4.2 upstream/4.2
authorJinWang An <jinwang.an@samsung.com>
Tue, 28 Dec 2021 06:15:18 +0000 (15:15 +0900)
committerJinWang An <jinwang.an@samsung.com>
Tue, 28 Dec 2021 06:15:18 +0000 (15:15 +0900)
237 files changed:
AUTHORS
ChangeLog [new file with mode: 0644]
Makefile.DOS
Makefile.am
Makefile.ami
Makefile.in
NEWS
NMakefile
README
README.Amiga
README.DOS
README.OS2
README.VMS
README.W32
README.customs
SMakefile
acinclude.m4
aclocal.m4
amiga.c
amiga.h
ar.c
arscan.c
build.sh.in
build_w32.bat [changed mode: 0644->0755]
commands.c
commands.h
config.ami
config.h-vms
config.h.W32
config.h.in
config/Makefile.am
config/Makefile.in
config/ar-lib
config/compile
config/config.guess
config/config.rpath
config/config.sub
config/depcomp
config/dospaths.m4
config/gettext.m4
config/iconv.m4
config/install-sh
config/intlmacosx.m4
config/lib-ld.m4
config/lib-link.m4
config/lib-prefix.m4
config/longlong.m4 [new file with mode: 0644]
config/mdate-sh
config/missing
config/nls.m4
config/po.m4
config/progtest.m4
config/texinfo.tex
configh.dos
configure
configure.ac
configure.bat
debug.h
default.c
dep.h
dir.c
doc/Makefile.am
doc/Makefile.in
doc/make-stds.texi
doc/make.info
doc/make.info-1
doc/make.info-2
doc/make.texi
doc/stamp-vti
doc/version.texi
dosbuild.bat
expand.c
file.c
filedef.h
function.c
getloadavg.c
getopt.c
getopt.h
getopt1.c
gettext.h
glob/Makefile.in
gmk-default.scm
gnumake.h
guile.c
implicit.c
job.c
job.h
load.c
loadapi.c
main.c
make.1
make_msvc_net2003.vcproj
makefile.com
makefile.vms
makeint.h
misc.c
os.h [new file with mode: 0644]
output.c
output.h
po/Makefile.in.in
po/Makevars
po/POTFILES.in
po/Rules-quot
po/be.gmo
po/be.po
po/cs.gmo
po/cs.po
po/da.gmo
po/da.po
po/de.gmo
po/de.po
po/es.gmo
po/es.po
po/fi.gmo
po/fi.po
po/fr.gmo
po/fr.po
po/ga.gmo
po/ga.po
po/gl.gmo
po/gl.po
po/he.gmo
po/he.po
po/hr.gmo
po/hr.po
po/id.gmo
po/id.po
po/it.gmo
po/it.po
po/ja.gmo
po/ja.po
po/ko.gmo
po/ko.po
po/lt.gmo
po/lt.po
po/make.pot
po/nl.gmo
po/nl.po
po/pl.gmo
po/pl.po
po/pt_BR.gmo
po/pt_BR.po
po/ru.gmo
po/ru.po
po/sv.gmo
po/sv.po
po/tr.gmo
po/tr.po
po/uk.gmo
po/uk.po
po/vi.gmo
po/vi.po
po/zh_CN.gmo
po/zh_CN.po
posixos.c [new file with mode: 0644]
read.c
remake.c
remote-cstms.c
remote-stub.c
rule.c
rule.h
signame.c
strcache.c
subproc.bat
tests/ChangeLog.1
tests/NEWS
tests/README
tests/config-flags.pm
tests/config_flags_pm.com
tests/mkshadow
tests/run_make_tests.com
tests/run_make_tests.pl
tests/scripts/features/archives
tests/scripts/features/conditionals
tests/scripts/features/double_colon
tests/scripts/features/errors
tests/scripts/features/include
tests/scripts/features/jobserver
tests/scripts/features/load
tests/scripts/features/output-sync
tests/scripts/features/parallelism
tests/scripts/features/patternrules
tests/scripts/features/vpath3
tests/scripts/features/vpathplus
tests/scripts/functions/call
tests/scripts/functions/error
tests/scripts/functions/file
tests/scripts/functions/foreach
tests/scripts/functions/shell
tests/scripts/functions/sort
tests/scripts/functions/warning
tests/scripts/misc/bs-nl
tests/scripts/misc/fopen-fail
tests/scripts/misc/general3
tests/scripts/options/dash-B
tests/scripts/options/dash-W
tests/scripts/options/dash-k
tests/scripts/options/dash-n
tests/scripts/options/dash-q
tests/scripts/options/print-directory
tests/scripts/targets/DELETE_ON_ERROR [new file with mode: 0644]
tests/scripts/targets/POSIX
tests/scripts/variables/MAKEFLAGS
tests/scripts/variables/MAKE_RESTARTS
tests/scripts/variables/SHELL
tests/scripts/variables/special
tests/scripts/vms/library [new file with mode: 0644]
tests/test_driver.pl
variable.c
variable.h
version.c
vms_exit.c [new file with mode: 0644]
vms_export_symbol.c [new file with mode: 0644]
vms_export_symbol_test.com [new file with mode: 0644]
vms_progname.c [new file with mode: 0644]
vmsdir.h
vmsfunctions.c
vmsify.c
vmsjobs.c
vpath.c
w32/Makefile.am
w32/Makefile.in
w32/compat/dirent.c
w32/compat/posixfcn.c
w32/include/dirent.h
w32/include/dlfcn.h
w32/include/pathstuff.h
w32/include/sub_proc.h
w32/include/w32err.h
w32/pathstuff.c
w32/subproc/NMakefile
w32/subproc/build.bat [deleted file]
w32/subproc/misc.c
w32/subproc/proc.h
w32/subproc/sub_proc.c
w32/subproc/w32err.c
w32/w32os.c [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
index 6539881..9b6212f 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -72,7 +72,7 @@ With suggestions/comments/bug reports from a cast of ... well ...
 hundreds, anyway :)
 
 -------------------------------------------------------------------------------
-Copyright (C) 1997-2014 Free Software Foundation, Inc.
+Copyright (C) 1997-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..581723c
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,1084 @@
+2016-05-22  Paul Smith  <psmith@gnu.org>
+
+       GNU Make release 4.2.
+
+2016-05-21  Joe Crayne  <oh.hello.joe@gmail.com>  (tiny change)
+
+       [SV 44742] Fix double-colon rules plus parallel builds.
+       * remake.c (update_file): Don't update double-colon target status
+       if we're still building targets.
+       (ftime_t): Don't propagate timestamps for double-colon targets that
+       we've not examined yet.
+       * tests/scripts/features/double_colon: Add parallel build tests.
+
+2016-05-21  Paul Smith  <psmith@gnu.org>
+
+       * read.c (eval): [SV 47960] Skip record waiting files when ignoring.
+       * tests/scripts/features/conditionals: Test this scenario.
+
+       Separate the GNU make load ABI from internal types.
+       Create an internal type "floc" and convert all users to that type.
+       * gnumake.h (gmk_floc): Remove the offset field from this type.
+       * loadapi.c (gmk_eval): Convert gmk_floc to internal floc.
+
+2016-05-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fixes for enhanced GCC warnings.
+       Move function prototypes into header files and out of .c files.
+       Use void argument lists for functions that accept no args.
+       Remove unused macros.  Make private functions static.  Align
+       types with printf format characters.
+
+2016-05-21  Paul Smith  <psmith@gnu.org>
+
+       Fix compile issues with Windows and VMS.
+       * main.c (initialize_stopchar_map): isblank() is not part of C89.
+       Install bits for space and tab directly.
+       * makeint.h: Don't define vfork; autoconf handles this for us.
+       * vmsjobs.c: Rename NEXT_TOKEN to V_NEXT_TOKEN to avoid conflicts.
+       * dir.c (print_dir_data_base): Visual Studio C doesn't have int64_t.
+       * w32/subproc/sub_proc.c (process_begin): Missing arg to memset().
+       * build_w32.bat: Don't use obsolete Visual Studio flags.
+
+       Allow compiling with an ISO C 1989/1990 compiler.
+       * posixos.c (jobserver_post_child): Use C89 for loop syntax.
+       * remake.c (update_goal_chain): Ditto.
+       * variable.c (parse_variable_definition): Ditto.
+
+2016-05-17  Eli Zaretskii  <eliz@gnu.org>
+
+       [SV 47942] Avoid random crashes in subordinate programs on MS-Windows
+       * w32/subproc/sub_proc.c (process_begin): Zero out startInfo
+       before using it.  Fixes crashes in Intel Fortran compiler invoked
+       by Make.
+
+2016-04-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the MS-Windows MinGW build
+       * build_w32.bat (GccCompile): Use -std=gnu99, as some code uses
+       C99 features ('for' loop initial declarations).
+
+       * dir.c (print_dir_data_base) [WINDOWS32]: Cast 'mtime' to
+       'int64_t', and use %I64d to print it, to avoid compile-time
+       warning about printing a 'time_t' value, which could be either
+       a 32-bit or a 64 bit integral type.
+
+2016-04-23  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/output-sync: increase test timeout.
+       I'm getting random failures with a timeout of 10s; increase to 30s.
+
+2016-04-11  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: Update for pre-release
+
+       * dep.h, makeint.h (show_goal_error): Move to makeint.h.
+
+2016-04-11  Paul Smith  <psmith@gnu.org>
+
+       [SV 46433] Show recipe line offsets in line number messages.
+       While displaying line numbers, show the relevant line number inside
+       the recipe not just the first line of the entire recipe.
+       Sample changes suggested by Brian Vandenberg <phantall@gmail.com>
+
+       * gnumake.h (gmk_floc): Add an 'offset' to track the recipe offset.
+       * read.c (eval, eval_makefile, eval_buffer): Initialize 'offset'.
+       (record_files, install_pattern_rule): Ditto.
+       * job.c (new_job, job_next_command): Update 'offset' based on the
+       line of the recipe we're expanding or invoking.
+       (child_error): Add 'offset' when showing the line number.
+       * function.c (func_shell_base): Ditto.
+       * output.c (error, fatal): Ditto.
+       * NEWS: Mention the new ability.
+       * tests/scripts/features/errors: Check the line number on errors.
+       * tests/scripts/functions/warning: Check the line number on warnings.
+       * tests/scripts/features/output-sync,
+       tests/scripts/features/parallelism, tests/scripts/functions/shell,
+       tests/scripts/functions/error: Update line numbers.
+
+2016-04-09  Paul Smith  <psmith@gnu.org>
+
+       * maintMakefile: Add a rule for storing preprocessor output.
+
+       [SV 102] Don't show unnecessary include file errors.
+       Delay the generation of error messages for included files until we
+       are sure that we can't rebuild that included file.
+       * dep.h (struct dep): Don't reuse "changed"; make a separate field
+       to keep "flags".  Get rid of dontcare and use the flag.
+       (struct goaldep): Create a new structure for goal prereqs
+       that tracks an errno value and the floc where the include happened.
+       Rework the structures to ensure they are supersets as expected.
+       In maintainer mode with GCC, use inline to get type checking.
+       * read.c (eval_makefile): Return a struct goaldep for the new
+       makefile.  Ensure errno is set properly to denote a failure.
+       (read_all_makefiles): Switch to goaldep and check errno.
+       (eval): Don't show included file errors; instead remember them.
+       * remake.c (update_goal_chain): Set global variables to the current
+       goaldep we're building, and the entire chain.
+       (show_goal_error): Check if the current failure is a consequence
+       of building an included makefile and if so print an error.
+       (complain): Call show_goal_error() on rule failure.
+       * job.c (child_error): Call show_goal_error() on child error.
+       * main.c (main): Switch from struct dep to goaldep.
+       * misc.c (free_dep_chain): Not used; make into a macro.
+       * tests/scripts/features/include: Update and include new tests.
+       * tests/scripts/options/dash-B, tests/scripts/options/dash-W,
+       tests/scripts/options/print-directory,
+       tests/scripts/variables/MAKE_RESTARTS: Update known-good-output.
+
+       * job.c (child_error): Add filename length to output length.
+       Reported by Dale Stimson <dale@riyescott.com>
+
+2016-04-04  Paul Smith  <psmith@gnu.org>
+
+       Preserve the real value of -jN in MAKEFLAGS using jobserver.
+       Previously if the jobserver was active, MAKEFLAGS would contain only
+       the -j option but not the number (not -j5 or whatever) so users
+       could not discover that value.  Allow that value to be provided in
+       MAKEFLAGS without error but still give warnings if -jN is provided
+       on the command line if the jobserver is already activated.
+
+       * NEWS: Discuss the new behavior.
+       * os.h, posixos.c, w32/w32os.c: Return success/failure from
+       jobserver_setup() and jobserver_parse_auth().
+       * main.c (main): Separate the command line storage of job slots (now
+       in arg_job_slots) from the control storage (in job_slots).  Make a
+       distinction between -jN flags read from MAKEFLAGS and those seen
+       on the command line: for the latter if the jobserver is enabled then
+       warn and disable it, as before.
+       * tests/scripts/features/jobserver: Add new testing.
+
+2016-04-04  Paul Smith  <psmith@gnu.org>
+
+       * tests/run_make_tests.pl: Add file/lineno info to .run file.
+
+       * maintMakefile: Fix logging of check-alt-config target.
+
+       * job.c (child_execute_job): Fix $(shell...) under NO_OUTPUT_SYNC.
+       * main.c (decode_output_sync_flags): Use NONE for NO_OUTPUT_SYNC.
+
+       * main.c (main): Restrict disabling debugging for MAKEFILES.
+
+       * Makefile.am, w32/Makefile.am: Fix *os.c for Windows builds.
+       Original change provided by Luke Allardyce <lukeallardyce@gmail.com>
+
+       * make.texi: Confirm that CURDIR contains an absolute path.
+
+       * docs/make.texi: [SV 47392] Add "Integrating make" chapter.
+
+       Change --jobserver-fds to more generic --jobserver-auth.
+       * NEWS: Mention the change.
+       * main.c: Rename jobserver_fds variable to jobserver_auth and
+       --jobserver-fds option to --jobserver-auth.
+       * os.h, posixos.c, w32/w32os.c: Rename jobserver_parse_arg() and
+       jobserver_get_arg() to jobserver_parse_auth()/jobserver_get_auth().
+
+2016-03-23  Paul Smith  <psmith@gnu.org>
+
+       * tests/run_make_tests.pl: Preserve $make_command
+       * tests/scripts/options/dash-n: Use $make_command.  This fixes
+       a spurious failure when running tests with valgrind enabled.
+
+       * variable.c: Clean up some memory leaks.
+
+       [SV 46995] Strip leading/trailing space from variable names
+       * makeint.h: Change MAP_SPACE to MAP_NEWLINE, and add MAP_PATHSEP
+       and MAP_SPACE which is now MAP_BLANK|MAP_NEWLINE.  Create
+       NEW_TOKEN(), END_OF_TOKEN(), ISBLANK(), ISSPACE() macros.
+       * main.c (initialize_stopchar_map): Set MAP_NEWLINE only for
+       newline characters.
+       * Convert all uses of isblank() and isspace() to macros.
+       * Examine all uses of isblank() (doesn't accept newlines) and
+       change them wherever possible to ISSPACE() (does accept newlines).
+       * function.c (func_foreach): Strip leading/trailing space.
+       * variable.c (parse_variable_definition): Clean up.
+       * tests/scripts/functions/foreach: Test settings and errors.
+       * tests/scripts/functions/call: Rewrite to new-style.
+       * tests/scripts/misc/bs-nl: Add many more tests for newlines.
+
+2016-03-21  Paul Smith  <psmith@gnu.org>
+
+       * function.c (func_file): Support reading from files.
+       * NEWS: Add information about reading files.
+       * make.texi (File Function): Describe reading files.
+       * tests/scripts/functions/file: Test new features for $(file ...)
+
+2016-03-20  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Setting Variables): Fix typo (add comma).
+
+       * job.c (child_error): Combine file info with error message.
+       * tests/scripts/...: Update error message matches.
+
+2016-03-19  Paul Smith  <psmith@gnu.org>
+
+       * variable.c: Align type of variable_changenum.
+
+2016-03-13  Paul Smith  <psmith@gnu.org>
+
+       [SV 45728] Detect changes in .VARIABLES more accurately.
+       For performance, we only recompute .VARIABLES when (a) it's expanded
+       and (b) when its value will change from a previous expansion.  To
+       determine (b) we were checking the number of entries in the hash
+       table which used to work until we started undefining entries: now if
+       you undefine and redefine the same number of entries in between
+       expanding .VARIABLES, it doesn't detect any change.  Instead, keep
+       an increasing change number.
+       * variables.c: Add variable_changenum.
+       (define_variable_in_set, merge_variable_sets): Increment
+       variable_changenum if adding a new variable to the global set.
+       (undefine_variable_in_set): Increment variable_changenum if
+       undefining a variable from the global set.
+       (lookup_special_var): Test variable_changenum not the hash table.
+       * tests/scripts/variables/special: Test undefining variables.
+
+       * main.c(main): Disable output sync without parallel builds.
+
+       [SV 46581] Pre-define .LOADED to avoid warnings.
+       * main.c (main): Pre-define .LOADED as a default-level variable.
+       * load.c (load_file): Set the value rather than append it.  Avoid
+       adding an extra initial whitespace.
+       * tests/scripts/features/load: Run with --warn-undefined-variables.
+
+2016-03-13  Paul Smith  <psmith@gnu.org>
+
+       [SV 44555] Use vfork() instead of fork() where available.
+       Testing has shown that vfork() is actually significantly
+       more efficient on systems where it's supported, even for
+       copy-on-write implementations.  If make is big enough,
+       duplicating the page tables is significant overhead.
+
+       * configure.ac: Check for fork/vfork.
+       * makeint.h: Include vfork.h and set up #define for it.
+       * os.h, posixos.c (get_bad_stdin): For children who can't use
+       the normal stdin file descriptor, get a broken one.
+       * job.c (start_job_command): Avoid so many ifdefs and simplify
+       the invocation of child_execute_job()
+       (child_execute_job): move the fork operation here so it can
+       return early for the parent process.  Switch to use vfork().
+       * function.c (func_shell_base): Use new child_execute_job() and
+       simplify ifdefs.
+       * job.h, main.c, remote-cstms.c, vmsjobs.c, w32os.c: Update
+       declarations and calls.
+
+2016-03-09  Paul Smith  <psmith@gnu.org>
+
+       * job.c (exec_command): [SV 47365] Show error on exec failure.
+
+2016-03-08  Paul Smith  <psmith@gnu.org>
+
+       [SV 46261] Use pselect() for jobserver where supported.
+       * Makefile.am, configure.ac: Check for pselect() and sys/select.h.
+       * main.c (main): Block SIGCHLD if we have pselect() support.
+       * posixos.c (jobserver_acquire): If we support pselect() then use
+       it to query the jobserver pipe, while also listening for SIGCHLD.
+       Also pselect() supports a timeout so avoid alarm() calls.
+
+       Clean up some compiler warnings.
+       * commands.c, commands.h: Use unsigned char for flags.
+       * dir.c: Use time_t and size_t, and char for a boolean value.
+       * job.c: Use unsigned and char.
+       * read.c: Return a signed type since -1 is a valid return code.
+
+       Extract jobserver implementation into OS-specific files.
+       * os.h, posixos.c, w32/w32os.c: New files implementing jobserver.
+       * job.c, job.h, main.c, makeint.h: Move content to new files.
+       * w32/include/sub_proc.h, w32/subproc/sub_proc.c: Ditto.
+       * Makefile.am: Build and package OS-specific files.
+       * build_w32.bat, make_msvc_net2003.vcproj, README.W32.template:
+       Update for new files, and clean up the build.
+       * POTFILES.in, maintMakefile, NMakefile.template: Ditto.
+       * w32/subproc/build.bat: Delete as unused.
+
+       [SV 46261] Add more EINTRLOOP wrappers.
+       This cannot be a perfect solution because there are always other
+       possible places EINTR can happen, including external libraries
+       such as gettext, Guile etc.
+
+2016-02-29  Paul Smith  <psmith@gnu.org>
+
+       * strcache.c (add_hugestring): [SV 46832] Support huge strings.
+       The strcache was limited to strings of length 65535 or less,
+       because the length is kept in an unsigned short.  To support
+       huge strings add a new simple linked list, which we don't try
+       to hash.
+
+       * strcache.c (add_string): [SV 47071] Handle huge initial string.
+       If the very first string added to the string cache is more than
+       half the maximum size, we failed when moving the only strcache
+       buffer to the full list.
+
+       [SV 47151] Exit with 1 when checking recursive make -q
+       * job.h (struct child): New bit to mark recursive command lines.
+       * job.c (start_job_command): Set the recursive command line bit.
+       (reap_children): If the child is a recursive command and it exits
+       with 1 during question mode, don't print an error and exit with 1.
+       * tests/scripts/options/dash-q: Add a regression test.
+
+       * main.c (define_makeflags): Add parens to avoid GCC warning.
+
+2016-02-29  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/archives: Handle deterministic archives.
+       Newer versions of binutils allow ar to be compiled to generate
+       "deterministic archives" by default: in this mode no timestamp
+       information is generated in the static archive, which utterly
+       breaks GNU make's archive updating capability.  Debian and Ubuntu
+       have turned this feature on by default in their distributions
+       which causes the regression tests to fail.
+
+       Update the regression tests to check for the availability of the
+       "U" option to ar which disables deterministic archives and allows
+       GNU make's archive support to work properly again.
+
+2016-02-28  Paul Smith  <psmith@gnu.org>
+
+       Update Copyright statements for the new year.
+
+       * doc/make.texi: [SV 47163] Fix typo in 'ifdef' documentation.
+
+       * doc/make.texi: [SV 35455] Add more uses for Empty Recipes.
+
+2015-11-07  Gisle Vanem  <gvanem@yahoo.no>
+
+       Fix diagnostics on MS-Windows when environment is too large
+               * w32/subproc/sub_proc.c (process_begin): Fix test of the error
+               cause when the environment block is too large.
+
+2015-10-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Update README.W32.template
+       * README.W32.template: Update for latest developments.  Make it
+       clear we don't recommend using HAVE_CASE_INSENSITIVE_FS in
+       general.
+
+       [SV 46304] Don't invoke C++ compiler on C sources on MS-Windows
+       * default.c (default_variables) [HAVE_CASE_INSENSITIVE_FS]: Make
+       COMPILE.C and LINK.C be synonyms for COMPILE.c and LINK.c,
+       respectively.
+
+2015-09-23  Eli Zaretskii  <eliz@gnu.org>
+
+       [SV 45838] When invoking w32 programs, don't use free'd memory.
+       * w32/subproc/sub_proc.c (process_begin): Freeing argv[0] makes
+       the other argv[i] pointers invalid, so need to allocate a new
+       array and copy argv[i] for i != 0 first, replacing argv[0] with
+       the batch file name, before we can free argv[0].
+
+2015-07-13  Paul Smith  <psmith@gnu.org>
+
+       * implicit.c (pattern_search): [SV 43677] Mark files secondary.
+       In order to fix SV 12267 we were marking the prerequisites of
+       implicit (pattern) targets that existed elsewhere in the makefile
+       as precious to keep them from being deleted as intermediate files.
+       However this also keeps them from being deleted on error.  Instead
+       mark them as secondary.
+       * tests/scripts/targets/DELETE_ON_ERROR: Test DELETE_ON_ERROR.
+
+2015-07-12  Paul Smith  <psmith@gnu.org>
+
+       [SV 28092] Preserve the exit status of the $(shell...) function.
+       Add a new variable .SHELLSTATUS which holds the exit status of the
+       last-invoked shell function or != assignment.
+
+       * NEWS, doc/make.texi: Document the change.
+       * function.c (shell_completed, msdos_openpipe, func_shell_base): Add
+       shell_completed() to handle the completion of the shell, by setting
+       .SHELLSTATUS.  Call it where needed.
+       * job.c (child_handler): Call shell_completed().
+       * tests/scripts/functions/shell: Add tests for .SHELLSTATUS.
+
+2015-07-12  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/misc/fopen-fail: [SV 42390] Increase test timeout.
+       * Makefile.am (check-regression): Force ulimit -n for fopen-fail test.
+
+       * job.c: [SV 43936] Check sigaction for error return.
+
+       [SV 45049] Check for '$' being the last character in a string.
+       * expand.c (variable_expand_string): Add a single '$' if '$' ends the
+       string.
+       * read.c (find_char_unquote, get_next_mword): Stop if '$' ends the
+       string.
+       * variable.c (parse_variable_definition): Ditto.
+
+       * read.c (unescape_char): [SV 45050] Handle final backslashes.
+       If the last thing in the string to be unescaped is a backslash,
+       stop without reading beyond the end of the string.
+
+       * strcache.c: [SV 45275] Handle very long strings.
+       Our previous behavior for handling too-long strings involved
+       increasing the size of the default string cache buffer, but the
+       implementation was incomplete.  Instead, create a one-off large
+       string cache entry and add it directly to the full cache list
+       without changing the default buffer size.
+
+2015-07-12  Duncan Moore  <duncan.moore@gmx.com>  (tiny change)
+
+       * job.c [RISCOS]: Remove logic that is no longer required.
+
+2015-07-12  Paul Smith  <psmith@gnu.org>
+
+       * remake.c (update_file): [SV 44742] Keep double-colon rule status.
+       Fix suggested by Everett Boyer <EvBoyer@aol.com>
+
+2015-07-10  James Johnston  <johnstonj.public@codenest.com>  (tiny change)
+
+       [SVN 45515] Check exit status of sub-make in subproc.bat
+       * subproc.bat: Exit when sub-make invocation fails.
+
+2015-07-10  Eli Zaretskii  <eliz@gnu.org>
+
+       [SV 45515] Ignore Windows-specific build artifacts
+       * .gitignore: Ignore *.exe, *.dll.a, *.lib, *pdb, and a few more MSVC
+       specific artifacts.
+       Suggested by James Johnston <johnstonj.public@codenest.com>
+
+2015-02-28  Eli Zaretskii  <eliz@gnu.org>
+
+       [SV 44348] Fix handling of shell widlcards on MS-Windows.
+               * job.c (construct_command_argv_internal): If shell wildcard
+               characters are found inside a string quoted with "..", give up the
+               fast route and go through the shell.  Fixes Savannah bug #44348.
+
+2015-01-27  John Malmberg  <wb8tyw@qsl.net>
+
+       Fix bs-nl handling, exit and Environment for VMS.
+       This fix required a complete rewrite of the command parser vmsjobs.c
+       child_execute_job.  The old parser had too many incorrect assumptions
+       about DCL commands and could not be repaired to extended.
+
+       The parser now more closely parses VMS commands and handles quoted
+       commands and redirection.  Command File mode has been improved, but can
+       not fully support bs-nl syntax.
+
+       VMS Unix shell simulation has been improved.
+
+       * commands.c: vms_comma_separator is now a run-time setting.
+       * function.c: vms_comma_separator is now a run-time setting.
+       * function.c(func_basename_dir) now reports "[]" or "./" based on
+         VMS crtl runtime setting.
+       * job.c(start_job_command): VMS Handle empty commands propery.
+       * main.c: Add VMS environment variables for run-time settings.
+         * vms_legacy_behavior - Force older behavior.
+         * vms_comma_separator - Commas or spaces for separators.
+         * vms_unix_simulation - Enhanced Posix shell simulation features.
+         * Detect if VMS CRTL is set to report Unix paths instead of VMS.
+         * ':' and '>' are also MAP_DIRSEP on VMS.
+       * makeint.h: Add VMS run-time option variables.
+       * readme.vms: Update to current behavior.
+       * variable.c(define_variable_in_set): Fix VMS Environment variable
+         lookup.
+       * variable.c(define_automatic_variables): Remove some VMS specific
+         automatic variables and use the Unix ones instead.
+       * vms_export_symbol.c: Set max symbol size correctly.
+       * vmsjobs.c: child_execute_job() complete rewrite of VMS comand
+         parsing.
+       * vmsjobs.c(build_vms_cmd): VMS commmand building with shell simulation.
+
+2014-12-27  Christian Boos  <cboos@edgewall.org>  (tiny change)
+
+       Fix $(shell) on hosts with 64-bit pid_t.
+       * function.c: Use pid_t for shell_function_pid.
+       * job.c: Likewise.
+
+2014-10-20  Paul Smith  <psmith@gnu.org>
+
+       * main.c (main): [SV 43434] Handle NULL returns from ttyname().
+
+2014-10-20  Benedikt Morbach  <benedikt.morbach@googlemail.com>  (tiny change)
+
+       * tests/scripts/features/archives: [SV 43405] override AR variable.
+
+2014-10-20  John Malmberg  <wb8tyw@qsl.net>
+
+       Fix VMS implicit rules and UNIX paths.
+       This fixes VMS implicit rules and UNIX style pathname handling.
+       It also fixes some of the VMS style pathname handling, more work
+       there will be needed later.
+       TODO: There are other case insensitive platforms besides VMS.
+       We need to find out why there is extra VMS code for this.  This
+       indicates either the extra VMS code is not needed, or the case
+       insensitive support may not be complete on the other case
+       insensitive platforms.
+
+       * default.c: Add missing definitions to default_suffix_rules[] and
+       default_variables[].
+       TODO: As it is important that VMS DCL mode definitions must always
+       be a superset of UNIX definitions, a better way of maintaining the
+       VMS DCL mode definitions should be devised.
+       * dir.c (downcase_inplace): Add a reentrant downcase() routine.
+       Add future support for VMS 8.2+ _USE_STD_STAT macro which will
+       disable a lot of VMS specific code from compiling.
+       (dir_file_exists_p): vmsify filename only if directory name has VMS
+       directory delimiters.
+       (file_exists_p): Handle both VMS and UNIX directories.
+       (file_impossible): Handle both VMS and Unix directories.  Track
+       whether a VMS format path is needed for the return value.
+       * file.c (lookup_file): Check if vmsify is needed; handle UNIX paths.
+       * implicit.c (pattern_search): Enable UNIX paths.
+       * read.c (parse_file_seq): Enable UNIX paths.
+       * remake.c (f_mtime): Fix gpath_search call for VMS paths.
+       * rule.c (count_implicit_rule): Enable UNIX paths, Fix VMS paths.
+       * vpath.c (selective_vpath_search): Enable UNIX paths.
+
+2014-10-20  John Malmberg  <wb8tyw@qsl.net>
+
+       Update README.VMS and move news to the NEWS file
+       * NEWS: Merge in VMS history.
+       * README.VMS: Remove VMS history, document current behavior and
+       known issues.
+
+2014-10-20  John Malmberg  <wb8tyw@qsl.net>
+
+       [SV 41758]: Fix archive support for VMS.
+       Upated to match change to run_make_tests and some future fixes to
+       make on VMS.
+
+       * arscan.c: Use ANSI compatible pragmas instead of VAX C extensions.
+       * tests/scripts/features/archives: Fix tests to use VMS rules and
+       answers when running on VMS and using DCL as a shell.
+       * tests/scripts/features/vpath3: Fix epected answer on test when
+       run on VMS.
+       * tests/scripts/vms/library: (New) Test the VMS library rules that
+       are not tested by existing tests.
+
+2014-10-20  John Malmberg  <wb8tyw@qsl.net>
+
+       [SV 42447]: VMS simulate exporting symbols
+       This also includes fixing the most of the exit handling code for VMS.
+
+       Self tests:
+        Previously about 94 Tests in 36 categories fail.
+        Now about 45 tests in 22 categories fail.
+
+       Because some tests do not properly clean up, the number of tests that
+       fail can vary by one or two test cases between consecutive runs.
+
+       * Makefile.am: Add new VMS files.
+       * job.c: add prototype for vms_strsignal().
+       * job.c: (child_error): Remove VMS specific code as no longer needed.
+       * job.c: (reap_children): The VMS specific code was setting the
+       status to 0 instead of setting it to the proper exit status.
+       * job.h: Add vms_launch_status to struct child.
+       * main.c: (main): Use environment variables for options to use MCR
+       * instead of a foreign command, and to always use command files for
+       subprocesses.
+       For VMS use (set_program_name) routine which is common to ports of
+       other GNU packages to VMS to set the program name used internally.
+       Use (vms_putenv_symbol) to set up symbols to be visible in child
+       programs, including recursive make launched by execve()
+       Start of Bash shell detection code for VMS.
+       * makefile.com: Need nested_include=none for building on VMS search
+       lists.  Add vms_progname, vms_exit, and vms_export_symbol.
+       * makefile.vms: Need nested_include=none for building on VMS search
+       lists.  Add vms_progname, vms_exit, vms_export_symbol.
+       * makeint.h: Make sure non-standard "VMS" macro is defined.  Add
+       prototypes for new VMS routines.  Remove VMS-specific failure codes.
+       * vmsjobs.c: Add VMS POSIX exit code constants.
+       (_is_unixy_shell): Detect Bash shell.
+       (vms_strsignal): simulate strsignal() on VMS.
+       (vmsHandleChildTerm): fix to properly report failed LIB$SPAWN() exit
+       status codes.  Remove code that duplicated code in job.c.
+       (child_execute_job): Export environment symbols before spawning a
+       child and restore afterward unless option to use command files for
+       subprocesses is set.  Improve handling of UNIX null commands ":".
+       * vms_exit.c: Provides vms_exit() to detect if an exit code is UNIX
+       or VMS, and converts the UNIX code into a VMS exit code.
+       * vms_export_symbol.c: Routines to create DCL symbols that work like
+       shell aliases or exported shell symbols and clean them up on exit.
+       * vms_export_symbol_test.com: Unit test for vms_export_symbol.c
+       * vms_progname.c: New file: VMS specific replace for progname.c that
+       is used in some GNU projects.
+
+2014-10-20  John Malmberg  <wb8tyw@qsl.net>
+
+       Set up for running tests on VMS.
+       * run_make_tests.pl: set $port_type to be 'VMS-DCL' when the test are
+       run from the VMS DCL Interpreter.  When the tests are run from GNV
+       on VMS, the $port_type will be 'UNIX'.
+       * run_make_tests.com: VMS search list support.  This is needed for
+       using a search list such as prj_root = lcl_root:,vms_root:,src_root:
+       for building and testing.
+
+2014-10-09  Paul Smith  <psmith@gnu.org>
+
+       * configure.ac, NEWS, README.git: Set up for the next release.
+
+2014-10-05  Paul Smith  <psmith@gnu.org>
+
+       GNU Make release 4.1.
+
+2014-10-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix Cygwin compilation error.
+       * job.c (construct_command_argv_internal) [HAVE_DOS_PATHS]: Fix
+       initializer for sh_chars_sh.
+       Reported by Denis Excoffier<cygwin@Denis-Excoffier.org>.
+
+2014-10-01  Gisle Vanem  <gvanem@yahoo.no>
+
+       Fix last commit.
+
+       * makeint.h (ftruncate): Define also for __WATCOMC__.
+
+2014-10-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid compilation warnings.
+       * main.c (find_and_set_default_shell, main) [WINDOWS32]: Declare
+       variables 'const char *' to avoid compiler warnings.
+       * job.c (construct_command_argv_internal) [!NDEBUG]: Declare 'end'
+       and set it only if NDEBUG is not defined, to avoid compiler
+       warnings.
+
+       Treat redirection of standard handles on Windows as it is done on Unix.
+       * job.c (start_job_command) [WINDOWS32]: Compute outfd and errfd
+       as on Posix platforms, and pass the results to process_easy.
+       * function.c (windows32_openpipe) [WINDOWS32]: Accept an
+       additional argument ERRFD and use it for redirecting the standard
+       error handle passed to the subprocess.
+       (func_shell_base) [WINDOWS32]: Pass the computed errfd to
+       windows32_openpipe.
+
+2014-09-30  Paul Smith  <psmith@gnu.org>
+
+       Update Copyright statements for 2014.
+
+       * tests/scripts/features/load: Avoid unused variable warnings.
+
+       * loadapi.c (gmk_eval): Use C90 syntax.
+
+2014-09-30  Hartmut Becker  <becker.ismaning@freenet.de>
+
+       * job.c: fix make action continuation lines.
+       * vmsjobs.c: fix writing DCL command files when trimming (white
+         spaces and $ signs) especially after a split (command continuation).
+
+2014-09-15  Bernhard Reutner-Fischer  <rep.dot.nop@gmail.com>  (tiny change)
+
+       * configure.ac: Fix spacing in helptext of customs
+
+2014-09-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Support MAKE_TERMOUT and MAKE_TERMERR on MS-Windows.
+       * w32/compat/posixfcn.c (isatty, ttyname): New functions.
+       * config.h.W32.template (HAVE_TTYNAME): Define.  Add a prototype
+       for ttyname.
+
+2014-09-15  Paul Smith  <psmith@gnu.org>
+
+       * loadapi.c (gmk_eval): [SV 43221] Preserve var buff content for eval.
+
+       * main.c, NEWS, doc/make.text: Rename MAKE_TTY* to MAKE_TERM*
+
+2014-09-14  Paul Smith  <psmith@gnu.org>
+
+       * main.c (main): Set MAKE_TTYOUT and MAKE_TTYERR.
+       * configure.ac: Test for isatty() and ttyname()
+       * makeint.h: provide a substitute for ttyname() if it's not available.
+       * config.ami.template, config.h-vms.template, config.h.W32.template:
+       define/undefine HAVE_ISATTY/HAVE_TTYNAME macros.
+       * NEWS, doc/make.texi: Document these new variables.
+
+2014-09-07  Paul Smith  <psmith@gnu.org>
+
+       * tests/config-flags.pm.in, tests/scripts/features/archives: [SV 43046]
+       Use the "ar" program detected by configure when running the test suite.
+
+       * doc/make.texi: Clarify implicit rule lookup of phony targets
+       Reported by Frank Heckenbach <f.heckenbach@fh-soft.de>
+
+2014-09-07  Hartmut Becker  <becker.ismaning@freenet.de>
+
+       Fix and enhance VMS library support.
+       * ar.c: fix VMS library search for members, which do not have
+       suffixes, aka filename extensions.
+       * arscan.c: fix time conversion and library callback routines.
+       * default.c: more suffixes and automatically create the VMS library
+       if it doesn't exists.
+
+       Enhance VMS exporting make environment variables.
+       * config.h-vms.template: add feature macro USE_DCL_COM_FILE to always
+       write a DCL command file, enabled by default.
+       * vmsjobs.c: with USE_DCL_COM_FILE enabled write make variables as DCL
+       symbol assignments into the command file.  This enables printing
+       directory and make level info for recursive use of make. This also
+       enables forced DCL symbol substitution in the actions.
+
+       Fix VMS automatic variable expansion
+       * function.c: add VMS code to func_notdir_suffix and func_basename_dir
+       to work on comma separated lists; this fixes the expansion of
+       $(^D), $(+D) and the F variants for VMS.
+
+       * main.c [VMS]: Say that parallel jobs (-j) are not supported on VMS
+
+       Enhance/fix VMS ONESHELL implementation and command execution
+       * job.c, vmsjobs.c: fix some double quote and new line handling;
+       implement ONESHELL with writing multiple lines into one DCL command
+       procedure; in ONESHELL allow VMS/make internal redirection only on the
+       first line; fix the created DCL command procedure, which didn't abort
+       on errors; return correct exit status from the DCL command procedure;
+       preserve current procedure verification; make the generated command
+       procedure more robust.
+
+       Enhance/fix VMS setting of program name, MAKE/MAKE_COMMAND variables
+       * default.c, main.c, makeint.h, vmsfunctions.c: prefix argv[0] with
+       "mcr " for MAKE/MAKE_COMMAND and set the program name to the image
+       filename (without the .exe;version)
+       * vmsfunctions.c: remove obsolete code
+       * vmsify: use xmalloc
+
+       Enhance/fix VMS exit code handling.
+       * commands.c, function.c, hash.c, job.c, main.c, output.c:
+       use MAKE exit codes.
+       * makeint.h: encode make exit codes so that they are VMS compatible.
+       * job.c: check child exit code for VMS style exit codes.
+       * vmsjobs.c: save and return VMS style exit code.
+
+       Enhance/fix VMS multi-line support.
+       * job.c: split the command line at a newline.
+       * default.c, vmsjobs.c: change ECHO variable to a pseudo builtin,
+       which ensures that the VMS/DCL ECHO ("write sys$output") is used
+       and is correctly quoted.
+       * vmsjobs.c: remove unused builtin 'rm'.
+
+       * config_flags_pm.com, [RENAMED test_make.com] run_make_tests.com:
+       Moved into tests directory.
+
+       Enhance/fix VMS build environment
+       * config.h-vms.template: make sure the CRTL version is known
+       * makefile.com: always compile/link the guile module, remove VAXCRTL
+       parameter, new LIST parameter
+       * makefile.vms: always compile/link the guile module, use more
+       complete dependencies
+       * prepare_vms.com: helper to create a VMS config file when building
+       from a snapshot of the repository
+
+2014-09-07  Paul Smith  <psmith@gnu.org>
+
+       * configure.ac, maintMakefile, w32/Makefile.am: Fix autotools issues.
+       Reported by Paul Eggert <eggert@cs.ucla.edu>
+
+2014-08-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Change the order of "makefile" and "Makefile" to match the manual.
+
+       Fix regression with "makefile" not being found on MS-Windows.
+       * read.c (read_all_makefiles) [WINDOWS32]: Recognize "makefile",
+       all-lowercase, as a makefile.  Reported by Michael Waeber
+       <waeber@gmail.com>.
+
+2014-07-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation on MS-Windows.
+       * makeint.h [WINDOWS32]: Don't declare 'program' as 'const char *',
+       since it is modified in 'main'.
+
+2014-07-12  Eli Zaretskii  <eliz@gnu.org>
+
+       [SV 42695] Fix compilation error on MS-Windows.
+       * main.c [WINDOWS32]: Don't declare 'program' as 'const char *',
+       since it is modified in 'main'.
+
+2014-07-12  Jonny Grant  <jg@jguk.org>  (tiny change)
+
+       Fix defalt_makefiles[] for MS-Windows.
+       * read.c (read_all_makefiles) [WINDOWS32]: Remove the redundant
+       "makefile" and add "makefile.mak".
+
+2014-07-07  Fredrik Fornwall  <fredrik@fornwall.net>  (tiny change)
+
+       * arscan.c [ANDROID]: Android has no ar.h but supports archives.
+
+2014-07-07  Paul Smith  <psmith@gnu.org>
+
+       * read.c (eval): [SV 41677] Correct test for TAB vs. 8 spaces.
+
+2014-07-07  Piotr Jaroszynski  <pjaroszynski@nvidia.com>  (tiny change)
+
+       * output.c (pump_from_tmp): [SV 42378] Flush the output file regularly.
+
+2014-07-07  John Malmberg  <wb8tyw@qsl.net>
+
+       Update the regression test harness to support VMS.
+       * config_flags_pm.com, test_make.com: set up and run the regression
+       test environment on VMS.
+       * tests/run_make_tests.pl [VMS]: Use an alternate rmdir()
+       implementation on VMS.
+       (run_make_with_options) [VMS]: Provide VMS-specific quoting and shell
+       invocations.
+       (set_more_defaults) [VMS]: Set default values when running on VMS.
+       * tests/test_driver.pl (vms_get_process_logicals) [VMS]: Retrieve the
+       proper values from %ENV on VMS.
+       (resetENV) [VMS]: Use it.
+       (toplevel) [VMS]: Fix a bug with opendir() on some logical_devices.
+       (compare_output) [VMS]: Convert VMS test output to a "standard" format.
+       (_run_command) [VMS]: Handle signals and exit codes the VMS way.
+       (remove_directory_tree_inner) [VMS]: Unlink all versions of the file.
+
+2014-07-07  Paul Smith  <psmith@gnu.org>
+
+       * various: Assume ISO C89-compliant free() implementation.
+
+       * maintMakefile, various: Improve constification of the codebase.
+
+       [SV 41983] Support omitting the text argument to $(file ...)
+       Reported by Tim Murphy <tnmurphy@gmail.com>
+       * function.c (func_file): Only write TEXT if it is not NULL.
+       * NEWS, doc/make.texi: Document the new feature
+       * tests/scripts/functions/file: Verify that the no-text version of
+         $(file ...) works and doesn't add a newline.
+
+2014-05-13  Jacques Germishuys  <jacques.germishuys@gmail.com>
+
+       NMakefile.template ($(OUTDIR)/posixfcn.obj): Fix a typo.
+
+2014-05-01  Paul Smith  <psmith@gnu.org>
+
+       [SV 42249] Propagate correct rule status results.
+       * remake.c (update_file, update_file_1, check_dep): Return an enum
+         update_status value instead of an int, and keep the highest value we
+         find as we walk the graph so that the ultimate status is correct.
+       * tests/scripts/options/dash-q: Add a test for updating prerequisites.
+
+2014-02-08  Paul Smith  <psmith@gnu.org>
+
+       * Rename MAP_PATHSEP to MAP_DIRSEP.
+
+       * configure.ac: Fixup for newer autoconf/automake
+
+2014-02-08  Ray Donnelly  <mingw.android@gmail.com>  (tiny change)
+
+       * output.c: Ensure space for final nul byte in fmtbuf.
+
+2014-02-07  Gisle Vanem  <gvanem@yahoo.no>  (tiny change)
+
+       Improve error reporting in the Windows port when env size is too large.
+       w32/subproc/misc.c (arr2envblk): Compute and return the size of
+       the environment passed to child process.
+
+       w32/subproc/sub_proc.c (process_begin): If the call to
+       CreateProcess failed with EINVAL, and the required environment
+       size was larger than 32KB, assume it's a Windows XP limitation,
+       and display an error message to that effect.
+
+       w32/subproc/proc.h (arr2envblk): Update prototype.
+
+2014-02-01  Paul Smith  <psmith@gnu.org>
+
+       * job.c (set_child_handler_action_flags): [SV 41341]
+       Ensure signal handler is in place before alarm(1).
+
+2014-01-20  Alan Hourihane  <alanh@fairlite.co.uk>  (tiny change)
+
+       * configure.ac: [SV 40790] Fix load autoconf variables.
+
+2014-01-17  Pavel Fedin  <p.fedin@samsung.com>  (tiny change)
+
+       Allow the EMX build to use output_sync.
+       job.c (start_job_command): Move the child output diversion out
+       of non-EMX branch.
+       [__EMX__]: Don't use fixed FD_STDOUT and FD_STDERR in the call to
+       child_execute_job.
+
+2014-01-12  Paul Smith  <psmith@gnu.org>
+
+       * commands.c: [SV 40789] Remove unneeded header dlfcn.h
+
+       * main.c (die): Close output_context AND make_sync.
+       die() can be invoked inside a separate output_context, if the
+       $(error ...) function is expanded as part of a recipe.
+
+2014-01-11  Pavel Fedin  <p.fedin@samsung.com>  (tiny change)
+
+       Fix .LIBPATTERNS for MS-Windows builds.
+       default.c (.LIBPATTERNS) [__CYGWIN__ || WINDOWS32]: Provide
+       library patterns for MS-Windows.
+
+2013-11-27  Paul Smith  <psmith@gnu.org>
+
+       * w32/*: Remove TABs from the source code.
+       I know whitespace commits are annoying, but having these TABs is
+       causing me to miss things when I search through the code.  This
+       doesn't try to change the w32 code to meet GNU coding standards.
+
+       * main.c (decode_env_switches): Ensure we have enough space.
+       Reported (with patch) by Gerte Hoogewerf <g.hoogewerf@gmail.com>
+
+2013-11-27  Stephan T. Lavavej  <stl@nuwen.net>  (tiny change)
+
+       Solve some Windows build issues.
+       * main.c (main): Use ONS(), not OSN().
+       (prepare_mutex_handle_string) [WINDOWS32]: Use %Ix formatting to
+       support both 32bit and 64bit systems.
+       * job.c (free_child, new_job): Use ONS(), not OSN().
+       * w32/subproc/w32err.c (map_windws32_error_to_string): Use O() when
+       calling fatal().
+
+2013-11-24  Paul Smith  <psmith@gnu.org>
+
+       * features/loadapi (test_expand): Allocate memory for the nul byte.
+
+       * load.c (load_file): Reset the name length minus the symbol.
+
+       * read.c (unescape_char): Use memmove() for overlapping memory.
+
+       Fix memory leak during environment option decoding.
+       * main.c (decode_switches): Always make a copy of option arguments.
+       (decode_env_switches): Use a stack buffer to convert environment
+       switches for parsing.
+
+       [SV 40226] Add a new type of switch: single-string options
+       * main.c (struct command_switch): Change the "string" types to "strlist"
+       and make "string" be a single-valued string instead.
+       (output_sync_option, jobserver_fds, sync_mutex): Change to string type.
+       (decode_output_sync_flags): Handle single strings instead of lists.
+       (prepare_mutex_handle_string): Ditto.
+       (main): Ditto.
+       (clean_jobserver): Ditto.
+       (init_switches): Handle the new type.
+       (decode_switches): Ditto.
+       (define_makeflags): Ditto.
+
+2013-11-23  Daniel Richard G  <skunk@iskunk.org>  (tiny change)
+
+       * load.c: [SV 40515] Define RTLD_GLOBAL if not set.
+
+2013-11-23  Paul Smith  <psmith@gnu.org>
+
+       [SV 40361] Don't use vsnprintf(), which is an ISO C99 function.
+       * output.c (error, fatal, message): Take an extra argument specifying
+       how many bytes are used by the formatted arguments.
+       (get_buffer): New function that allocates the requested buffer size.
+       Remove msc_vsnprintf(), vfmtconcat(), and fmtconcat() as unneeded.
+       * makeint.h: Declare various helper macros for generating output.
+       * *.c: Change all error(), fatal(), message() calls to use the macros,
+       or pass the extra length argument directly.
+
+2013-10-27  Paul Smith  <psmith@gnu.org>
+
+       * makeint.h (STOP_SET): [SV 40371] Cast to unsigned char.
+       * tests/scripts/misc/utf8: Test variable names with characters >127.
+       Fix suggested by Robert Bogomip <bob.bogo@milohedge.com>
+
+2013-10-24  Gerte Hoogewerf  <g.hoogewerf@gmail.com>
+
+       Fix MS Visual Studio NET2003 build.
+       * make_msvc_net2003.vcproj: Do not exclude guile.c from compilation.
+
+2013-10-23  Christian Boos  <cboos@edgewall.org>
+
+       Fix SV bug #40227 with respect to stack size set for the MSVC build.
+       * NMakefile.template (/STACK): Increase to 0x400000, mainly for
+       the 64-bit builds.  Fixes SV bug #40227.
+       (guile): Uncomment.
+
+2013-10-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the MS-Windows build: now guile.c must always be compiled in.
+       * build_w32.bat: Always compile guile.c and link against guile.o.
+         Reported by Alexey Pavlov <alexpux@gmail.com>.
+
+       * makeint.h (guile_gmake_setup): Define prototype unconditionally,
+       to avoid compiler warnings.
+
+2013-10-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix Savannah bug #31150 with failures due to setting window title.
+       * sub_proc.c (process_begin): Don't set startInfo.lpTitle, it
+       reportedly causes SV bug #31150, and according to MSDN it's a
+       no-no.
+
+       Fix Savannah bug 40241 with Unixy file names as commands to MSYS shell.
+       * sub_proc.c: Include filedef.h and variable.h.
+       (process_begin): If exec_path was not found, but its first
+       character is '/', assume there's some shell magic, and invoke the
+       command through '$(SHELL) -c "COMMAND"'.  Fixes SV bug#40241.
+       (make_command_line): Kludgey feature: if full_exec_path is "-c",
+       assume that argv[0] is not to be skipped, as it holds the command
+       string to be passed to the shell.
+
+2013-10-20  Paul Smith  <psmith@gnu.org>
+
+       * glob.c (glob) [SV 18123]: Cherry-pick glibc fix
+       Apply commit a471e96a5352a5f0bde6d32dd36d33524811a2b1 from
+       git://sourceware.org/git/glibc.git to fix
+       https://sourceware.org/bugzilla/show_bug.cgi?id=10278
+
+       * read.c (record_files): [SV 33034] Change fatal() to error()
+       Allows deprecated syntax.  However we don't guarantee this syntax
+       will continue to be legal in the future.
+       Change suggested by David Boyce <david.s.boyce@gmail.com>
+
+       * README.git: Add some missing release steps.
+
+2013-10-19  Paul Smith  <psmith@gnu.org>
+
+       [SV 40240] Use configure info to build load test shared libs
+       * tests/config-flags.pm.in: A new file containing variable assignments
+       for the test suite; these variables are set by configure to contain
+       the values detected there for compilers, flags, etc.
+       * tests/run_make_tests.pl: Require the config-flags.pm file
+       * tests/scripts/features/load, tests/scripts/features/loadapi: Use the
+       configure-provided values when building the shared test library.
+       * configure.ac: Replace tests/config-flags.pm.in
+       * Makefile.am: Make sure tests/config-flags.pm is up to date
+
+       * maintMakefile (checkcfg.%): Add testing of build.sh
+
+       [SV 40254] Modify build.sh to work properly with Guile support.
+       * guile.c (guile_gmake_setup) [HAVE_GUILE]: Define a stub function
+       when Guile support is not enabled.
+       * main.c (main) [HAVE_GUILE]: Always invoke guile_gmake_setup().
+       * Makefile.am: Make guile.c standard, not optional.
+       * build.template: Add the Guile compiler and linker flags.
+
+       * maintMakefile: Accept variable overrides from the environment.
+
+       * NEWS: Fix version so we can build a distfile.
+
+       * read.c (eval): Avoid GCC warning to add braces.
+
+       * GNUMAKEFLAGS: Remove -O so it passes in NO_OUTPUT_SYNC mode.
+
+2013-10-18  Christian Boos  <cboos@edgewall.org>
+
+       Fix initialization of stringlist variables for jobserver_fds and sync_mutex.
+        (tiny change)
+
+        main.c (prepare_mutex_handle_string, main): Initialize
+        stringlist variables with at least 2 members, as one member is not
+        currently supported.
+
+2013-10-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix MinGW64 problem with non-compliant vsnprintf.
+        makeint.h (__USE_MINGW_ANSI_STDIO) [__MINGW64_VERSION_MAJOR]:
+        Define for MinGW64, to force it to use an ANSI-compliant
+        implementation of vsnprintf.  Reported by Christian Boos
+        <cboos@edgewall.org>.
+
+       Fix the MSVC build on MS-Windows.
+        output.c (vsnprintf) [_MSC_VER]: Define, instead of defining
+        snprintf, which isn't used.  Reported by Christian Boos
+        <cboos@edgewall.org>.
+        NMakefile.template (OBJS): Add load.obj and posixfcn.obj.
+        ($(OUTDIR)/pathstuff.obj): New dependency.
+        Suggested by Christian Boos <cboos@edgewall.org>.
+
+2013-10-13  Paul Smith  <psmith@gnu.org>
+
+       [SV 40139] Modify "missing separator" for better translation
+
+       Add support for updating the GNU make web pages.
+       Add makefile rules for updating the http://www.gnu.org/software/make
+       web pages, including the online GNU make manual.
+
+       Convert to auto-generated ChangeLog files.
+       Rename existing ChangeLog files so they won't be distributed.
+       Add targets to maintMakefile to generate ChangeLog from the Git
+       repository.  This will require a version of gnulib be available.
+       Because ChangeLog is auto-generated, we have to switch our
+       automake mode to "foreign" or it will complain and fail.
+
+       Set up for the next release.
index 43753e4..7883fcc 100644 (file)
@@ -1,7 +1,7 @@
 # -*-Makefile-*- template for DJGPP
 # Makefile.in generated automatically by automake 1.2 from Makefile.am
 #
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
@@ -71,13 +71,13 @@ PACKAGE = make
 PERL = perl
 RANLIB = ranlib
 REMOTE = stub
-VERSION = 4.1
+VERSION = 4.2
 
 AUTOMAKE_OPTIONS = 1.2
 
 bin_PROGRAMS = make$(EXEEXT)
 
-make_SOURCES = ar.c arscan.c commands.c default.c dir.c expand.c file.c function.c getopt.c getopt1.c guile.c implicit.c job.c load.c loadapi.c main.c misc.c output.c read.c remake.c rule.c signame.c strcache.c variable.c version.c vpath.c hash.c remote-$(REMOTE).c
+make_SOURCES = ar.c arscan.c commands.c default.c dir.c expand.c file.c function.c getopt.c getopt1.c guile.c implicit.c job.c load.c loadapi.c main.c misc.c posixos.c output.c read.c remake.c rule.c signame.c strcache.c variable.c version.c vpath.c hash.c remote-$(REMOTE).c
 # This should include the glob/ prefix
 libglob_a_SOURCES =    glob/fnmatch.c glob/glob.c glob/fnmatch.h glob/glob.h
 make_LDADD =     glob/libglob.a
@@ -103,7 +103,7 @@ DEFS =  -I. -I$(srcdir) -I.
 CPPFLAGS = -DHAVE_CONFIG_H
 LDFLAGS =
 LIBS =
-make_OBJECTS =  ar.o arscan.o commands.o default.o dir.o expand.o file.o function.o getopt.o getopt1.o guile.o implicit.o job.o load.o loadapi.o main.o misc.o output.o read.o remake.o rule.o signame.o strcache.o variable.o version.o vpath.o hash.o remote-$(REMOTE).o
+make_OBJECTS =  ar.o arscan.o commands.o default.o dir.o expand.o file.o function.o getopt.o getopt1.o guile.o implicit.o job.o load.o loadapi.o main.o misc.o posixos.o output.o read.o remake.o rule.o signame.o strcache.o variable.o version.o vpath.o hash.o remote-$(REMOTE).o
 make_DEPENDENCIES =    glob/libglob.a
 make_LDFLAGS =
 libglob_a_LIBADD =
@@ -597,7 +597,7 @@ ar.o: ar.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h dep.h \
+ filedef.h hash.h dep.h
 
 # .deps/arscan.Po
 arscan.o: arscan.c makeint.h config.h \
@@ -610,8 +610,7 @@ commands.o: commands.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h dep.h \
- variable.h job.h output.h \
+ filedef.h hash.h dep.h variable.h job.h output.h \
  commands.h
 
 # .deps/default.Po
@@ -619,7 +618,8 @@ default.o: default.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h variable.h rule.h dep.h job.h output.h \
+ filedef.h hash.h variable.h rule.h dep.h job.h \
+ output.h \
  commands.h
 
 # .deps/dir.Po
@@ -627,7 +627,8 @@ dir.o: dir.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- hash.h filedef.h dep.h \
+ hash.h \
+ filedef.h dep.h \
 
 # .deps/expand.Po
 expand.o: expand.c makeint.h config.h \
@@ -651,8 +652,7 @@ function.o: function.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h \
- variable.h dep.h job.h output.h \
+ filedef.h hash.h variable.h dep.h job.h output.h \
  commands.h debug.h
 
 # .deps/getloadavg.Po
@@ -669,8 +669,7 @@ guile.o: guile.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- debug.h filedef.h hash.h \
- dep.h variable.h \
+ debug.h filedef.h hash.h dep.h variable.h \
  gmk-default.h
 
 # .deps/hash.Po
@@ -685,8 +684,7 @@ implicit.o: implicit.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h rule.h \
- dep.h debug.h variable.h job.h output.h \
+ filedef.h hash.h rule.h dep.h debug.h variable.h job.h output.h \
  commands.h
 
 # .deps/job.Po
@@ -696,23 +694,22 @@ job.o: job.c makeint.h config.h \
  gettext.h \
  job.h output.h \
  debug.h filedef.h hash.h \
- commands.h variable.h
+ commands.h variable.h os.h
 
 # .deps/load.Po
 load.o: load.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- debug.h filedef.h hash.h \
- variable.h
+ debug.h \
filedef.h hash.h variable.h
 
 # .deps/loadapi.Po
 loadapi.o: loadapi.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h \
- variable.h dep.h
+ filedef.h hash.h variable.h dep.h
 
 # .deps/loadavg-getloadavg.Po
 # dummy
@@ -722,8 +719,8 @@ main.o: main.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
filedef.h hash.h dep.h \
- variable.h job.h output.h \
os.h \
filedef.h hash.h dep.h variable.h job.h output.h \
  commands.h rule.h debug.h \
  getopt.h
 
@@ -732,15 +729,22 @@ misc.o: misc.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h dep.h \
- debug.h \
+ filedef.h hash.h dep.h debug.h \
 
 # .deps/output.Po
 output.o: output.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- job.h output.h \
+ job.h \
+ output.h \
+
+# .deps/posixos.Po
+posixos.o: posixos.c makeint.h config.h \
+ gnumake.h \
+ getopt.h \
+ gettext.h \
+ debug.h job.h output.h os.h
 
 # .deps/read.Po
 read.o: read.c makeint.h config.h \
@@ -756,8 +760,7 @@ remake.o: remake.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h job.h \
- output.h \
+ filedef.h hash.h job.h output.h \
  commands.h dep.h variable.h \
  debug.h
 
@@ -770,8 +773,7 @@ remote-stub.o: remote-stub.c makeint.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h job.h \
- output.h \
+ filedef.h hash.h job.h output.h \
  commands.h
 
 # .deps/rule.Po
@@ -814,5 +816,4 @@ vpath.o: vpath.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h \
- variable.h
+ filedef.h hash.h variable.h
index 204ab32..c88c465 100644 (file)
@@ -1,6 +1,6 @@
 # This is a -*-Makefile-*-, or close enough
 #
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
@@ -16,8 +16,8 @@
 # You should have received a copy of the GNU General Public License along with
 # this program.  If not, see <http://www.gnu.org/licenses/>.
 
-AUTOMAKE_OPTIONS = 1.8 dist-bzip2 check-news
-ACLOCAL_AMFLAGS        =  -I config
+AUTOMAKE_OPTIONS = dist-bzip2 silent-rules std-options
+ACLOCAL_AMFLAGS = -I config
 
 MAKE_HOST =    @MAKE_HOST@
 
@@ -26,6 +26,9 @@ if WINDOWSENV
   MAYBE_W32 =  w32
   W32INC =     -I $(top_srcdir)/w32/include
   W32LIB =     -Lw32 -lw32
+  ossrc =
+else
+  ossrc =      posixos.c
 endif
 
 SUBDIRS =      glob config po doc $(MAYBE_W32)
@@ -41,14 +44,14 @@ endif
 
 make_SOURCES = ar.c arscan.c commands.c default.c dir.c expand.c file.c \
                function.c getopt.c getopt1.c guile.c implicit.c job.c load.c \
-               loadapi.c main.c misc.c output.c read.c remake.c rule.c \
-               signame.c strcache.c variable.c version.c vpath.c hash.c \
-               $(remote)
+               loadapi.c main.c misc.c $(ossrc) output.c read.c remake.c \
+               rule.c signame.c strcache.c variable.c version.c vpath.c \
+               hash.c $(remote)
 
 EXTRA_make_SOURCES = vmsjobs.c remote-stub.c remote-cstms.c
 
 noinst_HEADERS = commands.h dep.h filedef.h job.h makeint.h rule.h variable.h \
-               debug.h getopt.h gettext.h hash.h output.h
+               debug.h getopt.h gettext.h hash.h output.h os.h
 
 make_LDADD =   @LIBOBJS@ @ALLOCA@ $(GLOBLIB) @GETLOADAVG_LIBS@ @LIBINTL@ \
                $(GUILE_LIBS)
@@ -71,7 +74,7 @@ endif
 
 # Extra stuff to include in the distribution.
 
-EXTRA_DIST =   README build.sh.in $(man_MANS) \
+EXTRA_DIST =   ChangeLog README build.sh.in $(man_MANS) \
                README.customs README.OS2 \
                SCOPTIONS SMakefile \
                README.Amiga Makefile.ami config.ami make.lnk amiga.c amiga.h \
@@ -79,7 +82,8 @@ EXTRA_DIST =  README build.sh.in $(man_MANS) \
                README.W32 NMakefile config.h.W32 build_w32.bat subproc.bat \
                make_msvc_net2003.sln make_msvc_net2003.vcproj \
                README.VMS makefile.vms makefile.com config.h-vms \
-               vmsdir.h vmsfunctions.c vmsify.c \
+               vmsdir.h vmsfunctions.c vmsify.c vms_exit.c vms_progname.c \
+               vms_export_symbol.c vms_export_symbol_test.com \
                gmk-default.scm gmk-default.h
 
 # This is built during configure, but behind configure's back
@@ -125,8 +129,8 @@ guile.$(OBJEXT): gmk-default.h
 gmk-default.h: $(srcdir)/gmk-default.scm
        (echo 'static const char *const GUILE_module_defn = " '\\ \
          && sed -e 's/;.*//' -e '/^[ \t]*$$/d' -e 's/"/\\"/g' -e 's/$$/ \\/' \
-                $(srcdir)/gmk-default.scm \
-          && echo '";') > $@
+                $(srcdir)/gmk-default.scm \
+         && echo '";') > $@
 
 # --------------- Local DIST Section
 
@@ -174,6 +178,7 @@ MAKETESTFLAGS =
 
 check-regression: tests/config-flags.pm
        @if test -f '$(srcdir)/tests/run_make_tests'; then \
+         ulimit -n 128; \
          if $(PERL) -v >/dev/null 2>&1; then \
            case `cd '$(srcdir)'; pwd` in `pwd`) : ;; \
              *) test -d tests || mkdir tests; \
@@ -188,9 +193,9 @@ check-regression: tests/config-flags.pm
          else \
            echo "Can't find a working Perl ($(PERL)); the test suite requires Perl."; \
          fi; \
-        else \
+       else \
          echo "Can't find the GNU Make test suite ($(srcdir)/tests)."; \
-        fi
+       fi
 
 
 # --------------- Maintainer's Section
index 7c561a3..39a9788 100644 (file)
@@ -3,7 +3,7 @@
 # NOTE: If you have no 'make' program at all to process this makefile, run
 # 'build.sh' instead.
 #
-# Copyright (C) 1995-2014 Free Software Foundation, Inc.
+# Copyright (C) 1995-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
index e2310fe..67b7616 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -16,7 +16,7 @@
 
 # This is a -*-Makefile-*-, or close enough
 #
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -104,27 +114,21 @@ bin_PROGRAMS = make$(EXEEXT)
 @WINDOWSENV_TRUE@am__append_2 = $(W32INC)
 check_PROGRAMS = loadavg$(EXEEXT)
 subdir = .
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/configure $(am__configure_deps) \
-       $(srcdir)/config.h.in $(top_srcdir)/tests/config-flags.pm.in \
-       getloadavg.c alloca.c $(top_srcdir)/config/depcomp \
-       $(include_HEADERS) $(noinst_HEADERS) ABOUT-NLS AUTHORS COPYING \
-       INSTALL NEWS README $(top_srcdir)/config/ar-lib \
-       $(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \
-       $(top_srcdir)/config/config.rpath \
-       $(top_srcdir)/config/config.sub \
-       $(top_srcdir)/config/install-sh $(top_srcdir)/config/missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/dospaths.m4 \
        $(top_srcdir)/config/gettext.m4 $(top_srcdir)/config/iconv.m4 \
        $(top_srcdir)/config/intlmacosx.m4 \
        $(top_srcdir)/config/lib-ld.m4 \
        $(top_srcdir)/config/lib-link.m4 \
-       $(top_srcdir)/config/lib-prefix.m4 $(top_srcdir)/config/nls.m4 \
+       $(top_srcdir)/config/lib-prefix.m4 \
+       $(top_srcdir)/config/longlong.m4 $(top_srcdir)/config/nls.m4 \
        $(top_srcdir)/config/po.m4 $(top_srcdir)/config/progtest.m4 \
        $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+       $(am__configure_deps) $(include_HEADERS) $(noinst_HEADERS) \
+       $(am__DIST_COMMON)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
@@ -139,20 +143,23 @@ loadavg_OBJECTS = $(nodist_loadavg_OBJECTS)
 loadavg_DEPENDENCIES =
 am__make_SOURCES_DIST = ar.c arscan.c commands.c default.c dir.c \
        expand.c file.c function.c getopt.c getopt1.c guile.c \
-       implicit.c job.c load.c loadapi.c main.c misc.c output.c \
-       read.c remake.c rule.c signame.c strcache.c variable.c \
-       version.c vpath.c hash.c remote-stub.c remote-cstms.c
-@USE_CUSTOMS_FALSE@am__objects_1 = remote-stub.$(OBJEXT)
-@USE_CUSTOMS_TRUE@am__objects_1 = remote-cstms.$(OBJEXT)
+       implicit.c job.c load.c loadapi.c main.c misc.c posixos.c \
+       output.c read.c remake.c rule.c signame.c strcache.c \
+       variable.c version.c vpath.c hash.c remote-stub.c \
+       remote-cstms.c
+@WINDOWSENV_FALSE@am__objects_1 = posixos.$(OBJEXT)
+@USE_CUSTOMS_FALSE@am__objects_2 = remote-stub.$(OBJEXT)
+@USE_CUSTOMS_TRUE@am__objects_2 = remote-cstms.$(OBJEXT)
 am_make_OBJECTS = ar.$(OBJEXT) arscan.$(OBJEXT) commands.$(OBJEXT) \
        default.$(OBJEXT) dir.$(OBJEXT) expand.$(OBJEXT) \
        file.$(OBJEXT) function.$(OBJEXT) getopt.$(OBJEXT) \
        getopt1.$(OBJEXT) guile.$(OBJEXT) implicit.$(OBJEXT) \
        job.$(OBJEXT) load.$(OBJEXT) loadapi.$(OBJEXT) main.$(OBJEXT) \
-       misc.$(OBJEXT) output.$(OBJEXT) read.$(OBJEXT) \
-       remake.$(OBJEXT) rule.$(OBJEXT) signame.$(OBJEXT) \
-       strcache.$(OBJEXT) variable.$(OBJEXT) version.$(OBJEXT) \
-       vpath.$(OBJEXT) hash.$(OBJEXT) $(am__objects_1)
+       misc.$(OBJEXT) $(am__objects_1) output.$(OBJEXT) \
+       read.$(OBJEXT) remake.$(OBJEXT) rule.$(OBJEXT) \
+       signame.$(OBJEXT) strcache.$(OBJEXT) variable.$(OBJEXT) \
+       version.$(OBJEXT) vpath.$(OBJEXT) hash.$(OBJEXT) \
+       $(am__objects_2)
 make_OBJECTS = $(am_make_OBJECTS)
 am__DEPENDENCIES_1 =
 @WINDOWSENV_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
@@ -267,6 +274,14 @@ ETAGS = etags
 CTAGS = ctags
 CSCOPE = cscope
 DIST_SUBDIRS = glob config po doc w32
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+       $(top_srcdir)/config/ar-lib $(top_srcdir)/config/compile \
+       $(top_srcdir)/config/config.guess \
+       $(top_srcdir)/config/config.rpath \
+       $(top_srcdir)/config/config.sub $(top_srcdir)/config/depcomp \
+       $(top_srcdir)/config/install-sh $(top_srcdir)/config/missing \
+       $(top_srcdir)/tests/config-flags.pm.in ABOUT-NLS AUTHORS \
+       COPYING INSTALL NEWS README alloca.c getloadavg.c
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -380,6 +395,7 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
 REMOTE = @REMOTE@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
@@ -433,6 +449,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -441,26 +458,28 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = 1.8 dist-bzip2 check-news
+AUTOMAKE_OPTIONS = dist-bzip2 silent-rules std-options
 ACLOCAL_AMFLAGS = -I config
 
 # Only process if target is MS-Windows
 @WINDOWSENV_TRUE@MAYBE_W32 = w32
 @WINDOWSENV_TRUE@W32INC = -I $(top_srcdir)/w32/include
 @WINDOWSENV_TRUE@W32LIB = -Lw32 -lw32
+@WINDOWSENV_FALSE@ossrc = posixos.c
+@WINDOWSENV_TRUE@ossrc = 
 SUBDIRS = glob config po doc $(MAYBE_W32)
 include_HEADERS = gnumake.h
 @USE_CUSTOMS_FALSE@remote = remote-stub.c
 @USE_CUSTOMS_TRUE@remote = remote-cstms.c
 make_SOURCES = ar.c arscan.c commands.c default.c dir.c expand.c file.c \
                function.c getopt.c getopt1.c guile.c implicit.c job.c load.c \
-               loadapi.c main.c misc.c output.c read.c remake.c rule.c \
-               signame.c strcache.c variable.c version.c vpath.c hash.c \
-               $(remote)
+               loadapi.c main.c misc.c $(ossrc) output.c read.c remake.c \
+               rule.c signame.c strcache.c variable.c version.c vpath.c \
+               hash.c $(remote)
 
 EXTRA_make_SOURCES = vmsjobs.c remote-stub.c remote-cstms.c
 noinst_HEADERS = commands.h dep.h filedef.h job.h makeint.h rule.h variable.h \
-               debug.h getopt.h gettext.h hash.h output.h
+               debug.h getopt.h gettext.h hash.h output.h os.h
 
 make_LDADD = @LIBOBJS@ @ALLOCA@ $(GLOBLIB) @GETLOADAVG_LIBS@ @LIBINTL@ \
        $(GUILE_LIBS) $(am__append_1)
@@ -469,7 +488,7 @@ AM_CPPFLAGS = $(GLOBINC) $(am__append_2)
 AM_CFLAGS = $(GUILE_CFLAGS)
 
 # Extra stuff to include in the distribution.
-EXTRA_DIST = README build.sh.in $(man_MANS) \
+EXTRA_DIST = ChangeLog README build.sh.in $(man_MANS) \
                README.customs README.OS2 \
                SCOPTIONS SMakefile \
                README.Amiga Makefile.ami config.ami make.lnk amiga.c amiga.h \
@@ -477,7 +496,8 @@ EXTRA_DIST = README build.sh.in $(man_MANS) \
                README.W32 NMakefile config.h.W32 build_w32.bat subproc.bat \
                make_msvc_net2003.sln make_msvc_net2003.vcproj \
                README.VMS makefile.vms makefile.com config.h-vms \
-               vmsdir.h vmsfunctions.c vmsify.c \
+               vmsdir.h vmsfunctions.c vmsify.c vms_exit.c vms_progname.c \
+               vms_export_symbol.c vms_export_symbol_test.com \
                gmk-default.scm gmk-default.h
 
 
@@ -530,7 +550,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -609,6 +628,22 @@ uninstall-binPROGRAMS:
 clean-binPROGRAMS:
        -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
 
+installcheck-binPROGRAMS: $(bin_PROGRAMS)
+       bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \
+         case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+          *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+         esac; \
+         f=`echo "$$p" | \
+            sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         for opt in --help --version; do \
+           if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
+                2>c$${pid}_.err </dev/null \
+                && test -n "`cat c$${pid}_.out`" \
+                && test -z "`cat c$${pid}_.err`"; then :; \
+           else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+         done; \
+       done; rm -f c$${pid}_.???; exit $$bad
+
 clean-checkPROGRAMS:
        -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
 
@@ -648,6 +683,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/output.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posixos.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remake.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote-cstms.Po@am__quote@
@@ -859,12 +895,6 @@ distclean-tags:
        -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
 
 distdir: $(DISTFILES)
-       @case `sed 15q $(srcdir)/NEWS` in \
-       *"$(VERSION)"*) : ;; \
-       *) \
-         echo "NEWS not updated; not releasing" 1>&2; \
-         exit 1;; \
-       esac
        $(am__remove_distdir)
        test -d "$(distdir)" || mkdir "$(distdir)"
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -947,15 +977,15 @@ dist-xz: distdir
        $(am__post_remove_distdir)
 
 dist-tarZ: distdir
-       @echo WARNING: "Support for shar distribution archives is" \
-                      "deprecated." >&2
+       @echo WARNING: "Support for distribution archives compressed with" \
+                      "legacy program 'compress' is deprecated." >&2
        @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
        tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
        $(am__post_remove_distdir)
 
 dist-shar: distdir
-       @echo WARNING: "Support for distribution archives compressed with" \
-                      "legacy program 'compress' is deprecated." >&2
+       @echo WARNING: "Support for shar distribution archives is" \
+                      "deprecated." >&2
        @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
        shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
        $(am__post_remove_distdir)
@@ -991,17 +1021,17 @@ distcheck: dist
        esac
        chmod -R a-w $(distdir)
        chmod u+w $(distdir)
-       mkdir $(distdir)/_build $(distdir)/_inst
+       mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
        chmod a-w $(distdir)
        test -d $(distdir)/_build || exit 0; \
        dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
          && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
          && am__cwd=`pwd` \
-         && $(am__cd) $(distdir)/_build \
-         && ../configure \
+         && $(am__cd) $(distdir)/_build/sub \
+         && ../../configure \
            $(AM_DISTCHECK_CONFIGURE_FLAGS) \
            $(DISTCHECK_CONFIGURE_FLAGS) \
-           --srcdir=.. --prefix="$$dc_install_base" \
+           --srcdir=../.. --prefix="$$dc_install_base" \
          && $(MAKE) $(AM_MAKEFLAGS) \
          && $(MAKE) $(AM_MAKEFLAGS) dvi \
          && $(MAKE) $(AM_MAKEFLAGS) check \
@@ -1145,7 +1175,7 @@ install-ps: install-ps-recursive
 
 install-ps-am:
 
-installcheck-am:
+installcheck-am: installcheck-binPROGRAMS
 
 maintainer-clean: maintainer-clean-recursive
        -rm -f $(am__CONFIG_DISTCLEAN_FILES)
@@ -1187,11 +1217,14 @@ uninstall-man: uninstall-man1
        install-html-am install-includeHEADERS install-info \
        install-info-am install-man install-man1 install-pdf \
        install-pdf-am install-ps install-ps-am install-strip \
-       installcheck installcheck-am installdirs installdirs-am \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
-       tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
-       uninstall-includeHEADERS uninstall-man uninstall-man1
+       installcheck installcheck-am installcheck-binPROGRAMS \
+       installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
+       uninstall-am uninstall-binPROGRAMS uninstall-includeHEADERS \
+       uninstall-man uninstall-man1
+
+.PRECIOUS: Makefile
 
 
 install-exec-local:
@@ -1213,8 +1246,8 @@ guile.$(OBJEXT): gmk-default.h
 gmk-default.h: $(srcdir)/gmk-default.scm
        (echo 'static const char *const GUILE_module_defn = " '\\ \
          && sed -e 's/;.*//' -e '/^[ \t]*$$/d' -e 's/"/\\"/g' -e 's/$$/ \\/' \
-                $(srcdir)/gmk-default.scm \
-          && echo '";') > $@
+                $(srcdir)/gmk-default.scm \
+         && echo '";') > $@
 
 # --------------- Local DIST Section
 
@@ -1247,6 +1280,7 @@ check-loadavg: loadavg$(EXEEXT)
 
 check-regression: tests/config-flags.pm
        @if test -f '$(srcdir)/tests/run_make_tests'; then \
+         ulimit -n 128; \
          if $(PERL) -v >/dev/null 2>&1; then \
            case `cd '$(srcdir)'; pwd` in `pwd`) : ;; \
              *) test -d tests || mkdir tests; \
@@ -1261,9 +1295,9 @@ check-regression: tests/config-flags.pm
          else \
            echo "Can't find a working Perl ($(PERL)); the test suite requires Perl."; \
          fi; \
-        else \
+       else \
          echo "Can't find the GNU Make test suite ($(srcdir)/tests)."; \
-        fi
+       fi
 
 # --------------- Maintainer's Section
 
diff --git a/NEWS b/NEWS
index 7e11787..27f6f06 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,6 @@
 GNU make NEWS                                               -*-indented-text-*-
   History of user-visible changes.
-  05 Oct 2014
+  22 May 2016
 
 See the end of this file for copyrights and conditions.
 
@@ -9,6 +9,45 @@ manual, which is contained in this distribution as the file doc/make.texi.
 See the README file and the GNU make manual for instructions for
 reporting bugs.
 \f
+Version 4.2 (22 May 2016)
+
+A complete list of bugs fixed in this version is available here:
+
+http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=106&set=custom
+
+* New variable: $(.SHELLSTATUS) is set to the exit status of the last != or
+  $(shell ...) function invoked in this instance of make.  This will be "0" if
+  successful or not "0" if not successful.  The variable value is unset if no
+  != or $(shell ...) function has been invoked.
+
+* The $(file ...) function can now read from a file with $(file <FILE).
+  The function is expanded to the contents of the file.  The contents are
+  expanded verbatim except that the final newline, if any, is stripped.
+
+* The makefile line numbers shown by GNU make now point directly to the
+  specific line in the recipe where the failure or warning occurred.
+  Sample changes suggested by Brian Vandenberg <phantall@gmail.com>
+
+* The interface to GNU make's "jobserver" is stable as documented in the
+  manual, for tools which may want to access it.
+
+  WARNING: Backward-incompatibility! The internal-only command line option
+  --jobserver-fds has been renamed for publishing, to --jobserver-auth.
+
+* The amount of parallelism can be determined by querying MAKEFLAGS, even when
+  the job server is enabled (previously MAKEFLAGS would always contain only
+  "-j", with no number, when job server was enabled).
+
+* VMS-specific changes:
+
+  * Perl test harness now works.
+
+  * Full support for converting Unix exit status codes to VMS exit status
+    codes.  BACKWARD INCOMPATIBILITY Notice: On a child failure the VMS exit
+    code is now the encoded Unix exit status that Make usually generates, not
+    the VMS exit status of the child.
+
+\f
 Version 4.1 (05 Oct 2014)
 
 A complete list of bugs fixed in this version is available here:
@@ -29,6 +68,33 @@ http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=105&set
   make.  Makefiles that rely on this syntax should be fixed.
   See https://savannah.gnu.org/bugs/?33034
 
+* VMS-specific changes:
+
+  * Support for library files added, including support for using the GNV ar
+    utility.
+
+  * Partial support for properly encoding Unix exit status codes into VMS exit
+    status codes.
+
+    WARNING: Backward-incompatibility! These are different exit status codes
+    than Make exited with in the past.
+
+  * Macros to hold the current make command are set up to translate the
+    argv[0] string to a VMS format path name and prefix it with "MCR " so that
+    the macro has a space in it.
+
+    WARNING: Backward-incompatibility!  This may break complex makefiles that
+    do processing on those macros.  This is unlikely because so much in that
+    area was not and is still not currently working on VMS, it is unlikely to
+    find such a complex makefile, so this is more likely to impact
+    construction of a future makefile.
+
+  * A command file is always used to run the commands for a recipe.
+
+    WARNING: Backward-incompatibility!  Running the make self tests has
+    exposed that there are significant differences in behavior when running
+    with the command file mode.  It is unknown if this will be noticed by most
+    existing VMS makefiles.
 \f
 Version 4.0 (09 Oct 2013)
 
@@ -237,6 +303,57 @@ http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=104&set
   after the variable name, to allow for simple, conditional, or appending
   multi-line variable assignment.
 
+* VMS-specific changes:
+
+  * Michael Gehre (at VISTEC-SEMI dot COM) supplied a fix for a problem with
+    timestamps of object modules in OLBs. The timestamps were not correctly
+    adjusted to GMT based time, if the local VMS time was using a daylight
+    saving algorithm and if daylight saving was switched off.
+
+  * John Eisenbraun (at HP dot COM) supplied fixes and and an enhancement to
+    append output redirection in action lines.
+
+  * Rework of ctrl+c and ctrl+y handling.
+
+  * Fix a problem with cached strings, which showed on case-insensitive file
+    systems.
+
+  * Build fixes for const-ified code in VMS specific sources.
+
+  * A note on appending the redirected output. With this change, a simple
+    mechanism is implemented to make ">>" work in action lines. In VMS
+    there is no simple feature like ">>" to have DCL command or program
+    output redirected and appended to a file. GNU make for VMS already
+    implements the redirection of output. If such a redirection is detected,
+    an ">" on the action line, GNU make creates a DCL command procedure to
+    execute the action and to redirect its output. Based on that, now ">>"
+    is also recognized and a similar but different command procedure is
+    created to implement the append. The main idea here is to create a
+    temporary file which collects the output and which is appended to the
+    wanted output file. Then the temporary file is deleted. This is all done
+    in the command procedure to keep changes in make small and simple. This
+    obviously has some limitations but it seems good enough compared with
+    the current ">" implementation. (And in my opinion, redirection is not
+    really what GNU make has to do.) With this approach, it may happen that
+    the temporary file is not yet appended and is left in SYS$SCRATCH.
+    The temporary file names look like "CMDxxxxx.". Any time the created
+    command procedure can not complete, this happens. Pressing Ctrl+Y to
+    abort make is one case. In case of Ctrl+Y the associated command
+    procedure is left in SYS$SCRATCH as well. Its name is CMDxxxxx.COM.
+
+  * Change in the Ctrl+Y handling. The CtrlY handler now uses $delprc to
+    delete all children. This way also actions with DCL commands will be
+    stopped. As before the CtrlY handler then sends SIGQUIT to itself,
+    which is handled in common code.
+
+  * Change in deleteing temporary command files. Temporary command files
+    are now deleted in the vms child termination handler. That deletes
+    them even if a Ctrl+C was pressed.
+
+  * The behavior of pressing Ctrl+C is not changed. It still has only an
+    effect, after the current action is terminated. If that doesn't happen
+    or takes too long, Ctrl+Y should be used instead.
+
 \f
 Version 3.81 (01 Apr 2006)
 
@@ -456,6 +573,42 @@ Version 3.80 (03 Oct 2002)
 
 * Updated to autoconf 2.54 and automake 1.7.  Users should not be impacted.
 
+* VMS-specific changes:
+
+  * In default.c define variable ARCH as IA64 for VMS on Itanium systems.
+
+  * In makefile.vms avoid name collision for glob and globfree.
+
+  * This is the VMS port of GNU Make done by Hartmut.Becker@compaq.com.
+
+    It is based on the specific version 3.77k and on 3.78.1. 3.77k was done
+    by Klaus Kämpf <kkaempf@rmi.de>, the code was based on the VMS port of
+    GNU Make 3.60 by Mike Moretti.
+
+    It was ported on OpenVMS/Alpha V7.1, DECC V5.7-006. It was re-build and
+    tested on OpenVMS/Alpha V7.2, OpenVMS/VAX 7.1 and 5.5-2. Different
+    versions of DECC were used. VAXC was tried: it fails; but it doesn't
+    seem worth to get it working. There are still some PTRMISMATCH warnings
+    during the compile. Although perl is working on VMS the test scripts
+    don't work. The function $shell is still missing.
+
+    There is a known bug in some of the VMS CRTLs. It is in the shipped
+    versions of VMS V7.2 and V7.2-1 and in the currently (October 1999)
+    available ECOs for VMS V7.1 and newer versions. It is fixed in versions
+    shipped with newer VMS versions and all ECO kits after October 1999. It
+    only shows up during the daylight saving time period (DST): stat()
+    returns a modification time 1 hour ahead. This results in GNU make
+    warning messages. For a just created source you will see:
+
+     $ gmake x.exe
+     gmake.exe;1: *** Warning: File 'x.c' has modification time in the future
+     (940582863 > 940579269)
+     cc    /obj=x.obj x.c
+     link  x.obj    /exe=x.exe
+     gmake.exe;1: *** Warning:  Clock skew detected.  Your build may be
+     incomplete.
+
+
 A complete list of bugs fixed in this version is available here:
 
   http://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=102
@@ -512,6 +665,56 @@ Version 3.79 (04 Apr 2000)
 
 * Hartmut Becker provided many updates for the VMS port of GNU make.
   See the README.VMS file for more details.
+
+* VMS-specific changes:
+
+  * Fix a problem with automatically remaking makefiles. GNU make uses an
+    execve to restart itself after a successful remake of the makefile. On
+    UNIX systems execve replaces the running program with a new one and
+    resets all signal handling to the default. On VMS execve creates a child
+    process, signal and exit handlers of the parent are still active, and,
+    unfortunately, corrupt the exit code from the child. Fix in job.c:
+    ignore SIGCHLD.
+
+  * Added some switches to reflect latest features of DECC. Modifications in
+    makefile.vms.
+
+  * Set some definitions to reflect latest features of DECC. Modifications in
+    config.h-vms (which is copied to config.h).
+
+  * Added extern strcmpi declaration to avoid 'implicitly declared' messages.
+    Modification in make.h.
+
+  * Default rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/
+    Compaq c/c++ compilers. Modifications in default.c.
+
+  * Usage of opendir() and friends, suppress file version. Modifications in
+    dir.c.
+
+  * Added VMS specific code to handle ctrl+c and ctrl+y to abort make.
+    Modifications in job.c.
+
+  * Added support to have case sensitive targets and dependencies but to
+    still use case blind file names. This is especially useful for Java
+    makefiles on VMS:
+
+        .SUFFIXES :
+        .SUFFIXES : .class .java
+        .java.class :
+                javac "$<
+        HelloWorld.class :      HelloWorld.java
+
+  * A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced.
+    It needs to be enabled to get this feature; default is disabled.  The
+    macro HAVE_CASE_INSENSITIVE_FS must not be touched: it is still enabled.
+    Modifications in file.c and config.h-vms.
+
+  * Bootstrap make to start building make is still makefile.com, but make
+    needs to be re-made with a make to make a correct version: ignore all
+    possible warnings, delete all objects, rename make.exe to a different
+    name and run it.
+
+  * Made some minor modifications to the bootstrap build makefile.com.
 \f
 Version 3.78 (22 Sep 1999)
 
@@ -614,6 +817,45 @@ Version 3.77 (28 Jul 1998)
 
 * Updates to the Windows 95/NT port from Rob Tulloh (see README.W32),
   and to the DOS port from Eli Zaretski (see README.DOS).
+
+* VMS-specific changes:
+
+  * This is the VMS port of GNU Make.
+    It is based on the VMS port of GNU Make 3.60 by Mike Moretti.
+    This port was done by Klaus Kämpf <kkaempf@rmi.de>
+
+  * There is first-level support available from proGIS Software, Germany.
+    Visit their web-site at http://www.progis.de to get information
+    about other vms software and forthcoming updates to gnu make.
+
+  * /bin/sh style I/O redirection is supported. You can now write lines like
+        mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt
+
+  * Makefile variables are looked up in the current environment. You can set
+    symbols or logicals in DCL and evaluate them in the Makefile via
+    $(<name-of-symbol-or-logical>).  Variables defined in the Makefile
+    override VMS symbols/logicals !
+
+  * Functions for file names are working now. See the GNU Make manual for
+    $(dir ...)  and $(wildcard ...).  Unix-style and VMS-style names are
+    supported as arguments.
+
+  * The default rules are set up for GNU C. Building an executable from a
+    single source file is as easy as 'make file.exe'.
+
+  * The variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for
+    different VMS systems can now be written by checking $(ARCH) as in
+      ifeq ($(ARCH),ALPHA)
+        $(ECHO) "On the Alpha"
+      else
+        $(ECHO) "On the VAX"
+      endif
+
+  * Command lines of excessive length are correctly broken and written to a
+    batch file in sys$scratch for later execution. There's no limit to the
+    lengths of commands (and no need for .opt files :-) any more.
+
+  * Empty commands are handled correctly and don't end in a new DCL process.
 \f
 Version 3.76.1 (19 Sep 1997)
 
@@ -662,8 +904,54 @@ Version 3.76 (16 Sep 1997)
   concerning this port to Eli Zaretskii <eliz@is.elta.co.il> or DJ
   Delorie <dj@delorie.com>.
 
-* John W. Eaton has updated the VMS port to support libraries and VPATH.
-\f
+* VMS-specific changes:
+
+  * John W. Eaton has updated the VMS port to support libraries and VPATH.
+
+  * The cd command is supported if it's called as $(CD). This invokes
+    the 'builtin_cd' command which changes the directory.
+    Calling 'set def' doesn't do the trick, since a sub-shell is
+    spawned for this command, the directory is changed *in this sub-shell*
+    and the sub-shell ends.
+
+  * Libraries are not supported. They were in GNU Make 3.60 but somehow I
+    didn't care porting the code. If there is enough interest, I'll do it at
+    some later time.
+
+  * The variable $^ separates files with commas instead of spaces (It's the
+    natural thing to do for VMS).
+
+  * See defaults.c for VMS default suffixes and my definitions for default
+    rules and variables.
+
+  * The shell function is not implemented yet.
+
+  * Load average routines haven't been implemented for VMS yet.
+
+  * The default include directory for including other makefiles is
+    SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use
+    SYS$LIBRARY: instead; maybe it wouldn't work that way).
+
+  * The default makefiles make looks for are: makefile.vms, gnumakefile,
+    makefile., and gnumakefile. .
+
+  * The stat() function and handling of time stamps in VMS is broken, so I
+    replaced it with a hack in vmsfunctions.c. I will provide a full rewrite
+    somewhere in the future. Be warned, the time resolution inside make is
+    less than what vms provides. This might be a problem on the faster Alphas.
+
+  * You can use a : in a filename only if you precede it with a backslash ('\').
+    E.g.- hobbes\:[bogas.files]
+
+  * Make ignores success, informational, or warning errors (-S-, -I-, or -W-).
+    But it will stop on -E- and -F- errors. (unless you do something
+    to override this in your makefile, or whatever).
+
+  * Remote stuff isn't implemented yet.
+
+  * Multiple line DCL commands, such as "if" statements, must be put inside
+    command files.  You can run a command file by using \@.
+
 Version 3.75 (27 Aug 1996)
 
 * The directory messages printed by `-w' and implicitly in sub-makes,
@@ -684,6 +972,14 @@ Version 3.75 (27 Aug 1996)
 * Rob Tulloh of Tivoli Systems has contributed a port to Windows NT or 95.
   See README.W32 for details, and direct all Windows-related questions to
   <rob_tulloh@tivoli.com>.
+
+* VMS-specific changes:
+
+  * Lots of default settings are adapted for VMS. See default.c.
+
+  * Long command lines are now converted to command files.
+
+  * Comma (',') as a separator is now allowed. See makefile.vms for an example.
 \f
 Version 3.73 (05 Apr 1995)
 
@@ -1219,7 +1515,7 @@ Version 3.05
 (Changes from versions 1 through 3.05 were never recorded.  Sorry.)
 \f
 -------------------------------------------------------------------------------
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 6ed11a7..8bd55fe 100644 (file)
--- a/NMakefile
+++ b/NMakefile
@@ -3,7 +3,7 @@
 # NOTE: If you have no 'make' program at all to process this makefile,
 # run 'build_w32.bat' instead.
 #
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
@@ -107,6 +107,7 @@ OBJS = \
        $(OUTDIR)/dirent.obj \
        $(OUTDIR)/pathstuff.obj \
        $(OUTDIR)/posixfcn.obj \
+       $(OUTDIR)/w32os.obj \
        $(guile)
 
 $(OUTDIR)/make.exe: $(OUTDIR) $(OBJS)
@@ -127,6 +128,8 @@ $(OUTDIR)/posixfcn.obj : w32/compat/posixfcn.c
        $(CC) $(CFLAGS) /c $?
 $(OUTDIR)/pathstuff.obj : w32/pathstuff.c
        $(CC) $(CFLAGS) /c $?
+$(OUTDIR)/w32os.obj : w32/w32os.c
+       $(CC) $(CFLAGS) /c $?
 
 # --------------- DEPENDENCIES
 #
@@ -139,7 +142,7 @@ $(OUTDIR)/ar.obj: ar.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h dep.h \
+ filedef.h hash.h dep.h
 
 # .deps/arscan.Po
 $(OUTDIR)/arscan.obj: arscan.c makeint.h config.h \
@@ -152,8 +155,7 @@ $(OUTDIR)/commands.obj: commands.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h dep.h \
- variable.h job.h output.h \
+ filedef.h hash.h dep.h variable.h job.h output.h \
  commands.h
 
 # .deps/default.Po
@@ -161,7 +163,8 @@ $(OUTDIR)/default.obj: default.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h variable.h rule.h dep.h job.h output.h \
+ filedef.h hash.h variable.h rule.h dep.h job.h \
+ output.h \
  commands.h
 
 # .deps/dir.Po
@@ -169,7 +172,8 @@ $(OUTDIR)/dir.obj: dir.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- hash.h filedef.h dep.h \
+ hash.h \
+ filedef.h dep.h \
 
 # .deps/expand.Po
 $(OUTDIR)/expand.obj: expand.c makeint.h config.h \
@@ -193,8 +197,7 @@ $(OUTDIR)/function.obj: function.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h \
- variable.h dep.h job.h output.h \
+ filedef.h hash.h variable.h dep.h job.h output.h \
  commands.h debug.h
 
 # .deps/getloadavg.Po
@@ -211,8 +214,7 @@ $(OUTDIR)/guile.obj: guile.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- debug.h filedef.h hash.h \
- dep.h variable.h \
+ debug.h filedef.h hash.h dep.h variable.h \
  gmk-default.h
 
 # .deps/hash.Po
@@ -227,8 +229,7 @@ $(OUTDIR)/implicit.obj: implicit.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h rule.h \
- dep.h debug.h variable.h job.h output.h \
+ filedef.h hash.h rule.h dep.h debug.h variable.h job.h output.h \
  commands.h
 
 # .deps/job.Po
@@ -238,23 +239,22 @@ $(OUTDIR)/job.obj: job.c makeint.h config.h \
  gettext.h \
  job.h output.h \
  debug.h filedef.h hash.h \
- commands.h variable.h
+ commands.h variable.h os.h
 
 # .deps/load.Po
 $(OUTDIR)/load.obj: load.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- debug.h filedef.h hash.h \
- variable.h
+ debug.h \
filedef.h hash.h variable.h
 
 # .deps/loadapi.Po
 $(OUTDIR)/loadapi.obj: loadapi.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h \
- variable.h dep.h
+ filedef.h hash.h variable.h dep.h
 
 # .deps/loadavg-getloadavg.Po
 # dummy
@@ -264,8 +264,8 @@ $(OUTDIR)/main.obj: main.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
filedef.h hash.h dep.h \
- variable.h job.h output.h \
os.h \
filedef.h hash.h dep.h variable.h job.h output.h \
  commands.h rule.h debug.h \
  getopt.h
 
@@ -274,15 +274,22 @@ $(OUTDIR)/misc.obj: misc.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h dep.h \
- debug.h \
+ filedef.h hash.h dep.h debug.h \
 
 # .deps/output.Po
 $(OUTDIR)/output.obj: output.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- job.h output.h \
+ job.h \
+ output.h \
+
+# .deps/posixos.Po
+$(OUTDIR)/posixos.obj: posixos.c makeint.h config.h \
+ gnumake.h \
+ getopt.h \
+ gettext.h \
+ debug.h job.h output.h os.h
 
 # .deps/read.Po
 $(OUTDIR)/read.obj: read.c makeint.h config.h \
@@ -298,8 +305,7 @@ $(OUTDIR)/remake.obj: remake.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h job.h \
- output.h \
+ filedef.h hash.h job.h output.h \
  commands.h dep.h variable.h \
  debug.h
 
@@ -312,8 +318,7 @@ $(OUTDIR)/remote-stub.obj: remote-stub.c makeint.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h job.h \
- output.h \
+ filedef.h hash.h job.h output.h \
  commands.h
 
 # .deps/rule.Po
@@ -356,5 +361,4 @@ $(OUTDIR)/vpath.obj: vpath.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h \
- variable.h
+ filedef.h hash.h variable.h
diff --git a/README b/README
index 9ed662a..ab78043 100644 (file)
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-This directory contains the 4.1 release of GNU Make.
+This directory contains the 4.2 release of GNU Make.
 
 See the file NEWS for the user-visible changes from previous releases.
 In addition, there have been bugs fixed.
@@ -162,7 +162,7 @@ at the right README!
 
 \f
 -------------------------------------------------------------------------------
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index f9be348..68d3ea7 100644 (file)
@@ -61,7 +61,7 @@ If you plan to use recursive makes, install make resident:
 
 \f
 -------------------------------------------------------------------------------
-Copyright (C) 1995-2014 Free Software Foundation, Inc.
+Copyright (C) 1995-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 335661c..66e83d0 100644 (file)
@@ -62,7 +62,7 @@ To build from sources:
       [Enter].  Otherwise, you need to supply the path to the source
       directory as an argument to the batch file, like this:
 
-        c:\djgpp\gnu\make-4.1\configure.bat c:/djgpp/gnu/make-4.1
+        c:\djgpp\gnu\make-4.2\configure.bat c:/djgpp/gnu/make-4.2
 
       Note the forward slashes in the source path argument: you MUST
       use them here.
@@ -84,7 +84,7 @@ To build from sources:
       If you are building from outside of the source directory, you
       need to tell Make where the sources are, like this:
 
-                make srcdir=c:/djgpp/gnu/make-4.1
+                make srcdir=c:/djgpp/gnu/make-4.2
 
       (configure.bat will tell you this when it finishes).  You MUST
       use a full, not relative, name of the source directory here, or
@@ -324,7 +324,7 @@ Bug reports:
 
 \f
 -------------------------------------------------------------------------------
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 9e2045e..0ce81b4 100644 (file)
@@ -160,7 +160,7 @@ from the make source tree.
 
 \f
 -------------------------------------------------------------------------------
-Copyright (C) 2003-2014 Free Software Foundation, Inc.
+Copyright (C) 2003-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 2ff553c..5532b01 100644 (file)
-This version of GNU make has been tested on
-OpenVMS V8.3 (Alpha) and V8.4 (Integrity).
+Overview:                                                       -*-text-mode-*-
+---------
+
+  This version of GNU make has been tested on:
+  OpenVMS V8.3/V8.4 (Alpha) and V8.4 (Integrity) AND V7.3 (VAX)
+
+  This version of GNU Make is intended to be run from DCL to run
+  make scripts with a special syntax that is described below.  It
+  likely will not be able to run unmodified Unix makefiles.
+
+  There is an older implementation of GNU Make that was ported to GNV.
+  Work is now in progress to merge that port to get a single version
+  of GNU Make available.  When that merge is done, GNU Make will auto
+  detect that it is running under a Posix shell and then operate as close to
+  GNU Make on Unix as possible.
+
+  The descriptions below are for running GNU make from DCL or equivalent.
+
+Recipe differences:
+-------------------
+
+  GNU Make for OpenVMS can not currently run native Unix make files because of
+  differences in the implementation.
+
+  I am trying to document the current behavior in this section.  This is based
+  on the information in the file NEWS. and running the test suite.
+  TODO: More tests are needed to validate and demonstrate the OpenVMS
+  expected behavior.
+
+  In some cases the older behavior of GNU Make when run from DCL is not
+  compatible with standard makefile behavior.
+
+  This behavior can be changed when running GNU Make from DCL by setting
+  either DCL symbols or logical names of the format GNV$.  The settings
+  are enabled with a string starting with one of '1', 'T', or 'E' for "1",
+  "TRUE", or "ENABLE".  They are disabled with a '0', 'F', or 'D' for "1",
+  "FALSE", or "DISABLE".  If they are not explicitly set to one of these
+  values, then they will be set to their default values.
+
+  The value of the setting DECC$FILENAME_UNIX_REPORT or
+  DECC$FILENAME_UNIX_ONLY will now cause the $(dir x) function to return
+  './' or '[]' as appropriate.
+
+  The name GNV$MAKE_OLD_VMS when enabled will cause GNU Make to behave as
+  much as the older method as can be done with out disabling VMS features.
+  When it is disabled GNU Make have the new behavior which more closely
+  matches Unix Make behavior.
+
+  The default is currently the old behavior when running GNU Make from DCL.
+  In the future this may change.  When running make from GNV Bash the new
+  behavior is the default.
+
+  This is a global setting that sets the default behavior for several other
+  options that can be individually changed.  Many of the individual settings
+  are to make it so that the self tests for GNU Make need less VMS specific
+  modifications.
+
+  The name GNV$MAKE_COMMA when enabled will cause GNU Make to expect a comma
+  for a path separator and use a comma for the separator for a list of files.
+  When disabled, it will cause GNU Make to use a colon for a path separator
+  and a space for the separator for a list of files.  The default is to be
+  enabled if the GNU Make is set to the older behavior.
+
+  The name GNV$MAKE_SHELL_SIM when enabled will cause GNU Make to try to
+  simulate a Posix shell more closely.  The following behaviors occur:
+
+    * Single quotes are converted to double quotes and any double
+      quotes inside of them are doubled.  No environment variable expansion
+      is simulated.
+    * A exit command status will be converted to a Posix Exit
+      where 0 is success and non-zero is failure.
+    * The $ character will cause environment variable expansion.
+    * Environent variables can be set on the command line before a command.
+
+  VMS generally uses logical name search lists instead of path variables
+  where the resolution is handled by VMS independent of the program.  Which
+  means that it is likely that nothing will notice if the default path
+  specifier is changed in the future.
+
+  Currently the built in VMS specific macros and recipes depend on the comma
+  being used as a file list separator.
+  TODO: Remove this dependency as other functions in GNU Make depend on a
+  space being used as a separator.
+
+  The format for recipes are a combination of Unix macros, a subset of
+  simulated UNIX commands, some shell emulation, and OpenVMS commands.
+  This makes the resulting makefiles unique to the OpenVMS port of GNU make.
+
+  If you are creating a OpenVMS specific makefile from scratch, you should also
+  look at MMK (Madgoat Make) available at https://github.com/endlesssoftware/mmk
+  MMK uses full OpenVMS syntax and a persistent subprocess is used for the
+  recipe lines, allowing multiple line rules.
+
+  The default makefile search order is "makefile.vms", "gnumakefile",
+  "makefile".  TODO: See if that lookup is case sensitive.
+
+  When Make is invoked from DCL, it will create a foreign command
+  using the name of executable image, with any facility prefix removed,
+  for the duration of the make program, so it can be used internally
+  to recursively run make().  The macro MAKE_COMMAND will be set to
+  this foreign command.
+
+  When make is launched from an exec*() command from a C program,
+  the foreign command is not created.  The macro MAKE_COMMAND will be
+  set to the actual command passed as argv[0] to the exec*() function.
+
+  If the DCL symbol or logical name GNV$MAKE_USE_MCR exists, then
+  the macro MAKE_COMMAND will be set to be an "MCR" command with the
+  absolute path used by DCL to launch make.  The foreign command
+  will not be created.
+
+  The macro MAKE is set to be the same value as the macro MAKE_COMMAND
+  on all platforms.
+
+  Each recipe command is normally run as a separate spawned processes,
+  except for the cases documented below where a temporary DCL command
+  file may be used.
+
+  BUG: Testing has shown that the commands in the temporary command files
+  are not always created properly.  This issue is still under investigation.
+
+  Any macros marked as exported are temporarily created as DCL symbols
+  for child images to use.  DCL symbol substitution is not done with these
+  commands.
+  Untested: Symbol substitution.
+
+  When a temporary DCL command file is used, DCL symbol substitution
+  will work.
+
+  For VMS 7.3-1 and earlier, command lines are limited to 255 characters
+  or 1024 characters in a command file.
+  For VMS 7.3-2 and later, command lines are limited to 4059 characters
+  or 8192 characters in a command file.
+
+  VMS limits each token of a command line to 256 characters, and limits
+  a command line to 127 tokens.
+
+  Command lines above the limit length are written to a command file
+  in sys$scratch:.
+
+  In order to handle Unix style extensions to VMS DCL, GNU Make has
+  parsed the recipe commands and them modified them as needed.  The
+  parser has been re-written to resolve numerous bugs in handling
+  valid VMS syntax and potential buffer overruns.
+
+  The new parser may need whitespace characters where DCL does not require
+  it, and also may require that quotes are matched were DCL forgives if
+  they are not.  There is a small chance that existing VMS specific makefiles
+  will be affected.
+
+  The '<', '>' was previously implemented using command files.  Now
+  GNU Make will check to see if the is already a VMS "PIPE" command and
+  if it is not, will convert the command to a VMS "PIPE" command.
+
+  The '>>' redirection has been implemented by using a temporary command file.
+  This will be described later.
 
-Build instructions
-------------------
-Make a 1st version
-       $ @makefile.com  ! ignore any compiler and/or linker warning
-       $ copy make.exe 1st-make.exe
-  Use the 1st version to generate a 2nd version
-       $ mc sys$disk:[]1st-make clean  ! ignore any file not found messages
-       $ mc sys$disk:[]1st-make
-  Verify your 2nd version
-       $ copy make.exe 2nd-make.exe
-       $ mc sys$disk:[]2nd-make clean
-       $ mc sys$disk:[]2nd-make
-  Don't use the HP C V7.2-001 compiler, which has an incompatible change
-  how __STDC__ is defined. This results at least in compile time warnings.
-\f
-Changes since GNU make 3.82
----------------------------
+  The DCL symbol or logical name GNV$MAKE_USE_CMD_FILE when set to a
+  string starting with one of '1','T', or 'E' for "1", "TRUE", or "ENABLE",
+  then temporary DCL command files are always used for running commands.
+
+  Some recipe strings with embedded new lines will not be handled correctly
+  when a command file is used.
+
+  GNU Make generally does text comparisons for the targets and sources.  The
+  make program itself can handle either Unix or OpenVMS format filenames, but
+  normally does not do any conversions from one format to another.
+  TODO: The OpenVMS format syntax handling is incomplete.
+  TODO: ODS-5 EFS support is missing.
+  BUG: The internal routines to convert filenames to and from OpenVMS format
+  do not work correctly.
+
+  Note: In the examples below, line continuations such as a backslash may have
+  been added to make the examples easier to read in this format.
+  BUG: That feature does not completely work at this time.
+
+  Since the OpenVMS utilities generally expect OpenVMS format paths, you will
+  usually have to use OpenVMS format paths for rules and targets.
+  BUG: Relative OpenVMS paths may not work in targets, especially combined
+  with vpaths.  This is because GNU make will just concatenate the directories
+  as it does on Unix.
+
+  The variables $^ and $@ separate files with commas instead of spaces.
+  This is controlled by the name GNV$MAKE_COMMA as documented in the
+  previous section.
+
+  While this may seem the natural thing to do with OpenVMS, it actually
+  causes problems when trying to use other make functions that expect the
+  files to be separated by spaces.  If you run into this, you need the
+  following workaround to convert the output.
+  TODO: Look at have the $^ and $@ use spaces like on Unix and have
+  and easy to use function to do the conversions and have the built
+  in OpenVMS specific recipes and macros use it.
 
-Fix build problems.
-
-The new feature "Loadable objects" is not yet supported. If you need it,
-please send a change request or submit a bug report.
-
-The new option --output-sync (-O) is accepted but has no effect: GNU make
-for VMS does not support running multiple commands simultaneously.
-\f
-Changes for GNU make 3.82
-
-Michael Gehre (at VISTEC-SEMI dot COM) supplied a fix for a problem with
-timestamps of object modules in OLBs. The timestamps were not correctly
-adjusted to GMT based time, if the local VMS time was using a daylight saving
-algorithm and if daylight saving was switched off.
-
-John Eisenbraun (at HP dot COM) supplied fixes and and an enhancement to append
-output redirection in action lines.
-
-Rework of ctrl+c and ctrl+y handling.
-
-Fix a problem with cached strings, which showed on case-insensitive file
-systems.
-
-Build fixes for const-ified code in VMS specific sources.
-
-A note on appending the redirected output. With this change, a simple mechanism
-is implemented to make ">>" work in action lines. In VMS there is no simple
-feature like ">>" to have DCL command or program output redirected and appended
-to a file. GNU make for VMS already implements the redirection of output. If
-such a redirection is detected, an ">" on the action line, GNU make creates a
-DCL command procedure to execute the action and to redirect its output. Based
-on that, now ">>" is also recognized and a similar but different command
-procedure is created to implement the append. The main idea here is to create a
-temporary file which collects the output and which is appended to the wanted
-output file. Then the temporary file is deleted. This is all done in the
-command procedure to keep changes in make small and simple. This obviously has
-some limitations but it seems good enough compared with the current ">"
-implementation. (And in my opinion, redirection is not really what GNU make has
-to do.) With this approach, it may happen that the temporary file is not yet
-appended and is left in SYS$SCRATCH. The temporary file names look like
-"CMDxxxxx.". Any time the created command procedure can not complete, this
-happens. Pressing Ctrl+Y to abort make is one case. In case of Ctrl+Y the
-associated command procedure is left in SYS$SCRATCH as well. Its name is
-CMDxxxxx.COM.
-
-Change in the Ctrl+Y handling. The CtrlY handler now uses $delprc to delete all
-children. This way also actions with DCL commands will be stopped. As before
-the CtrlY handler then sends SIGQUIT to itself, which is handled in common
-code.
-
-Change in deleteing temporary command files. Temporary command files are now
-deleted in the vms child termination handler. That deletes them even if
-a Ctrl+C was pressed.
-
-The behavior of pressing Ctrl+C is not changed. It still has only an effect,
-after the current action is terminated. If that doesn't happen or takes too
-long, Ctrl+Y should be used instead.
-\f
-Changes for GNU make 3.80
-
-. In default.c define variable ARCH as IA64 for VMS on Itanium systems.
-
-. In makefile.vms avoid name collision for glob and globfree.
-\f
-This is the VMS port of GNU Make done by Hartmut.Becker@compaq.com.
-
-It is based on the specific version 3.77k and on 3.78.1. 3.77k was done
-by Klaus Kämpf <kkaempf@rmi.de>, the code was based on the VMS port of
-GNU Make 3.60 by Mike Moretti.
-
-It was ported on OpenVMS/Alpha V7.1, DECC V5.7-006. It was re-build and
-tested on OpenVMS/Alpha V7.2, OpenVMS/VAX 7.1 and 5.5-2. Different
-versions of DECC were used. VAXC was tried: it fails; but it doesn't
-seem worth to get it working. There are still some PTRMISMATCH warnings
-during the compile. Although perl is working on VMS the test scripts
-don't work. The function $shell is still missing.
-
-There is a known bug in some of the VMS CRTLs. It is in the shipped
-versions of VMS V7.2 and V7.2-1 and in the currently (October 1999)
-available ECOs for VMS V7.1 and newer versions. It is fixed in versions
-shipped with newer VMS versions and all ECO kits after October 1999. It
-only shows up during the daylight saving time period (DST): stat()
-returns a modification time 1 hour ahead. This results in GNU make
-warning messages. For a just created source you will see:
+  Example:
 
- $ gmake x.exe
- gmake.exe;1: *** Warning: File 'x.c' has modification time in the future (940582863 > 940579269)
- cc    /obj=x.obj x.c
- link  x.obj    /exe=x.exe
- gmake.exe;1: *** Warning:  Clock skew detected.  Your build may be incomplete.
+comma := ,
+empty :=
+space := $(empty) $(empty)
 
+foo: $(addsuffix .3,$(subs $(comma),$(space),$^)
 
-New in 3.78.1:
 
-Fix a problem with automatically remaking makefiles. GNU make uses an
-execve to restart itself after a successful remake of the makefile. On
-UNIX systems execve replaces the running program with a new one and
-resets all signal handling to the default. On VMS execve creates a child
-process, signal and exit handlers of the parent are still active, and,
-unfortunately, corrupt the exit code from the child. Fix in job.c:
-ignore SIGCHLD.
+  Makefile variables are looked up in the current environment. You can set
+  symbols or logicals in DCL and evaluate them in the Makefile via
+  $(<name-of-symbol-or-logical>).  Variables defined in the Makefile
+  override OpenVMS symbols/logicals.
 
-Added some switches to reflect latest features of DECC. Modifications in
-makefile.vms.
+  OpenVMS logical and symbols names show up as "environment" using the
+  origin function.  when the "-e" option is specified, the origion function
+  shows them as "environment override".  On Posix the test scripts indicate
+  that they should show up just as "environment".
 
-Set some definitions to reflect latest features of DECC. Modifications in
-config.h-vms (which is copied to config.h).
+  When GNU make reads in a symbol or logical name into the environment, it
+  converts any dollar signs found to double dollar signs for convenience in
+  using DCL symbols and logical names in recipes.  When GNU make exports a
+  DCL symbol for a child process, if the first dollar sign found is followed
+  by second dollar sign, then all double dollar signs will be convirted to
+  single dollar signs.
 
-Added extern strcmpi declaration to avoid 'implicitly declared' messages.
-Modification in make.h.
+  The variable $(ARCH) is predefined as IA64, ALPHA or VAX respectively.
+  Makefiles for different OpenVMS systems can now be written by checking
+  $(ARCH).  Since IA64 and ALPHA are similar, usually just a check for
+  VAX or not VAX is sufficient.
 
-Default rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/
-Compaq c/c++ compilers. Modifications in default.c.
+  You may have to update makefiles that assume VAX if not ALPHA.
 
-Usage of opendir() and friends, suppress file version. Modifications in dir.c.
+ifeq ($(ARCH),VAX)
+  $(ECHO) "On the VAX"
+else
+  $(ECHO) "On the ALPHA  or IA64"
+endif
 
-Added VMS specific code to handle ctrl+c and ctrl+y to abort make.
-Modifications in job.c.
+  Empty commands are handled correctly and don't end in a new DCL process.
 
-Added support to have case sensitive targets and dependencies but to
-still use case blind file names. This is especially useful for Java
-makefiles on VMS:
+  The exit command needs to have OpenVMS exit codes.  To pass a Posix code
+  back to the make script, you need to encode it by multiplying it by 8
+  and then adding %x1035a002 for a failure code and %x1035a001 for a
+  success.  Make will interpret any posix code other than 0 as a failure.
+  TODO: Add an option have simulate Posix exit commands in recipes.
 
-       .SUFFIXES :
-       .SUFFIXES :     .class .java
-       .java.class :
-               javac "$<
-       HelloWorld.class :      HelloWorld.java
+  Lexical functions can be used in pipes to simulate shell file test rules.
 
-A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced.
-It needs to be enabled to get this feature; default is disabled.  The
-macro HAVE_CASE_INSENSITIVE_FS must not be touched: it is still enabled.
-Modifications in file.c and config.h-vms.
+  Example:
 
-Bootstrap make to start building make is still makefile.com, but make
-needs to be re-made with a make to make a correct version: ignore all
-possible warnings, delete all objects, rename make.exe to a different
-name and run it.
+  Posix:
+b : c ; [ -f $@ ] || echo >> $@
 
-Made some minor modifications to the bootstrap build makefile.com.
-\f
-This is the VMS port of GNU Make.
+  OpenVMS:
+b : c ; if f$$search("$@") then pipe open/append xx $@ ; write xx "" ; close xx
 
-It is based on the VMS port of GNU Make 3.60 by Mike Moretti.
 
-This port was done by Klaus Kämpf <kkaempf@rmi.de>
+  You can also use pipes and turning messages off to silently test for a
+  failure.
 
-There is first-level support available from proGIS Software, Germany.
-Visit their web-site at http://www.progis.de to get information
-about other vms software and forthcoming updates to gnu make.
+x = %x1035a00a
 
-New for 3.77:
+%.b : %.c
+<tab>pipe set mess/nofac/noiden/nosev/notext ; type $^/output=$@ || exit $(x)
 
-/bin/sh style I/O redirection is supported. You can now write lines like
-       mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt
 
-Makefile variables are looked up in the current environment. You can set
-symbols or logicals in DCL and evaluate them in the Makefile via
-$(<name-of-symbol-or-logical>).  Variables defined in the Makefile
-override VMS symbols/logicals !
+Runtime issues:
 
-Functions for file names are working now. See the GNU Make manual for
-$(dir ...)  and $(wildcard ...).  Unix-style and VMS-style names are
-supported as arguments.
+  The OpenVMS C Runtime has a convention for encoding a Posix exit status into
+  to OpenVMS exit codes.  These status codes will have the hex value of
+  0x35a000.  OpenVMS exit code may also have a hex value of %x10000000 set on
+  them.  This is a flag to tell DCL not to write out the exit code.
 
-The default rules are set up for GNU C. Building an executable from a
-single source file is as easy as 'make file.exe'.
+  To convert an OpenVMS encoded Posix exit status code to the original code
+  You subtract %x35a000 and any flags from the OpenVMS code and divide it by 8.
+
+  WARNING: Backward-incompatibility!
+  The make program exit now returns the same encoded Posix exit code as on
+  Unix. Previous versions returned the OpenVMS exit status code if that is what
+  caused the recipe to fail.
+  TODO: Provide a way for scripts calling make to obtain that OpenVMS status
+  code.
+
+  Make internally has two error codes, MAKE_FAILURE and MAKE_TROUBLE.  These
+  will have the error "-E-" severity set on exit.
+
+  MAKE_TROUBLE is returned only if the option "-q" or "--question" is used and
+  has a Posix value of 1 and an OpenVMS status of %x1035a00a.
+
+  MAKE_FAILURE has a Posix value of 2 and an OpenVMS status of %x1035a012.
+
+  Output from GNU make may have single quotes around some values where on
+  other platforms it does not.  Also output that would be in double quotes
+  on some platforms may show up as single quotes on VMS.
+
+  There may be extra blank lines in the output on VMS.
+  https://savannah.gnu.org/bugs/?func=detailitem&item_id=41760
+
+  There may be a "Waiting for unfinished jobs..." show up in the output.
+
+  Error messages generated by Make or Unix utilities may slightly vary from
+  Posix platforms.  Typically the case may be different.
+
+  When make deletes files, on posix platforms it writes out 'rm' and the list
+  of files.  On VMS, only the files are writen out, one per line.
+  TODO: VMS
+
+  There may be extra leading white space or additional or missing whitespace
+  in the output of recipes.
+
+  GNU Make uses sys$scratch: for the tempfiles that it creates.
+
+  The OpenVMS CRTL library maps /tmp to sys$scratch if the TMP: logical name
+  does not exist.  As the CRTL may use both sys$scratch: and /tmp internally,
+  if you define the TMP logical name to be different than SYS$SCRATCH:,
+  you may end up with only some temporary files in TMP: and some in SYS$SCRATCH:
+
+  The default include directory for including other makefiles is
+  SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use
+  SYS$LIBRARY: instead; maybe it wouldn't work that way).
+  TODO:  A better default may be desired.
+
+  If the device for a file in a recipe does not exist, on OpenVMS an error
+  message of "stat: <file>: no such device or address" will be output.
+
+  Make ignores success, informational, or warning errors (-S-, -I-, or
+  -W-).  But it will stop on -E- and -F- errors. (unless you do something
+  to override this in your makefile, or whatever).
+
+
+Unix compatibilty features:
+---------------------------
 
-The variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for
-different VMS systems can now be written by checking $(ARCH) as in
-  ifeq ($(ARCH),ALPHA)
-    $(ECHO) "On the Alpha"
-  else
-    $(ECHO) "On the VAX"
-  endif
+  If the command 'echo' is seen, any single quotes on the line will be
+  converted to double quotes.
 
-Command lines of excessive length are correctly broken and written to a
-batch file in sys$scratch for later execution. There's no limit to the
-lengths of commands (and no need for .opt files :-) any more.
+  The variable $(CD) is implemented as a built in Change Directory
+  command. This invokes the 'builtin_cd'  Executing a 'set default'
+  recipe doesn't do the trick, since it only affects the subprocess
+  spawned for that command.
 
-Empty commands are handled correctly and don't end in a new DCL process.
+  The 'builtin_cd' is generally expected to be on its own line.
+  The 'builtin_cd' either from the expansion of $(CD) or directly
+  put in a recipe line will be executed before any other commands in
+  that recipe line.  DCL parameter substitution will not work for the
+  'builtin_cd' command.
 
+  Putting a 'builtin_cd' in a pipeline or an IF-THEN line should not be
+  done because the 'builtin_cd' is always executed
+  and executed first.  The directory change is persistent.
 
-New for 3.76:
+  Unix shell style I/O redirection is supported. You can now write lines like:
+  "<tab>mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt"
 
-John W. Eaton has updated the VMS port to support libraries and VPATH.
+  Posix shells have ":" as a null command.  These are now handled.
+  https://savannah.gnu.org/bugs/index.php?41761
 
+  A note on appending the redirected output.  A simple mechanism is
+  implemented to make ">>" work in action lines. In OpenVMS there is no simple
+  feature like ">>" to have DCL command or program output redirected and
+  appended to a file. GNU make for OpenVMS implements the redirection
+  of ">>" by using a command procedure.
 
-To build Make, simply type @makefile.  This should compile all the
-necessary files and link Make.  There is also a file called
-makefile.vms.  If you already have GNU Make built you can just use
-Make with this makefile to rebuild.
+  The current algorithm creates the output file if it does not exist and
+  then uses the DCL open/append to extend it.  SYS$OUTPUT is then directed
+  to that file.
 
-Here are some notes about GNU Make for VMS:
+  The implementation supports only one redirected append output to a file
+  and that redirection is done before any other commands in that line
+  are executed, so it redirects all output for that command.
 
-The cd command is supported if it's called as $(CD). This invokes
-the 'builtin_cd' command which changes the directory.
-Calling 'set def' doesn't do the trick, since a sub-shell is
-spawned for this command, the directory is changed *in this sub-shell*
-and the sub-shell ends.
+  The older implementation wrote the output to a temporary file in
+  in sys$scratch: and then attempted to append the file to the existing file.
+  The temporary file names looked like "CMDxxxxx.". Any time the created
+  command procedure can not complete, this happens. Pressing Ctrl+Y to
+  abort make is one case.
 
-Libraries are not supported. They were in GNU Make 3.60 but somehow I
-didn't care porting the code. If there is enough interest, I'll do it at
-some later time.
+  In case of Ctrl+Y the associated command procedure is left in SYS$SCRATCH:.
+  The command procedures will be named gnv$make_cmd*.com.
 
-The variable $^ separates files with commas instead of spaces (It's the
-natural thing to do for VMS).
+  The CtrlY handler now uses $delprc to delete all children. This way also
+  actions with DCL commands will be stopped. As before the CtrlY handler
+  then sends SIGQUIT to itself, which is handled in common code.
 
-See defaults.c for VMS default suffixes and my definitions for default
-rules and variables.
+  Temporary command files are now deleted in the OpenVMS child termination
+  handler. That deletes them even if a Ctrl+C was pressed.
+  TODO: Does the previous section about >> leaving files still apply?
 
-The shell function is not implemented yet.
+  The behavior of pressing Ctrl+C is not changed. It still has only an effect,
+  after the current action is terminated. If that doesn't happen or takes too
+  long, Ctrl+Y should be used instead.
 
-Load average routines haven't been implemented for VMS yet.
 
-The default include directory for including other makefiles is
-SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use
-SYS$LIBRARY: instead; maybe it wouldn't work that way).
+Build Options:
+
+  Added support to have case sensitive targets and dependencies but to
+  still use case blind file names. This is especially useful for Java
+  makefiles on VMS:
+
+<TAB>.SUFFIXES :
+<TAB>.SUFFIXES : .class .java
+<TAB>.java.class :
+<TAB><TAB>javac "$<"
+<TAB>HelloWorld.class :      HelloWorld.java
+
+  A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced.
+  It needs to be enabled to get this feature; default is disabled.
+  TODO: This should be a run-time setting based on if the process
+  has been set to case sensitive.
+
+
+Unimplemented functionality:
+
+  The new feature "Loadable objects" is not yet supported. If you need it,
+  please send a change request or submit a bug report.
+
+  The new option --output-sync (-O) is accepted but has no effect: GNU make
+  for OpenVMS does not support running multiple commands simultaneously.
+
+
+Self test failures and todos:
+-----------------------------
+
+  The test harness can not handle testing some of the VMS specific modes
+  because of the features needed for to be set for the Perl to run.
+  Need to find a way to set the VMS features before running make as a
+  child.
+
+  GNU make was not currently translating the OpenVMS encoded POSIX values
+  returned to it back to the Posix values.  I have temporarily modified the
+  Perl test script to compensate for it.  This should be being handled
+  internally to Make.
+  TODO: Verify and update the Perl test script.
+
+  The features/parallelism test was failing. OpenVMS is executing the rules
+  in sequence not in parallel as this feature was not implemented.
+  GNU Make on VMS no longer claims it is implemented.
+  TODO: Implement it.
+
+  Symlink support is not present.  Symlinks are supported by OpenVMS 8.3 and
+  later.
+
+  Error messages should be supressed with the "-" at the beginning of a line.
+  On openVMS they were showing up.  TODO: Is this still an issue?
+
+  The internal vmsify and unixify OpenVMS to/from UNIX are not handling logical
+  names correctly.
+
+
+Build instructions:
+------------------
+
+  Don't use the HP C V7.2-001 compiler, which has an incompatible change
+  how __STDC__ is defined. This results at least in compile time warnings.
+
+Make a 1st version
+       $ @makefile.com  ! ignore any compiler and/or linker warning
+       $ copy make.exe 1st-make.exe
+
+  Use the 1st version to generate a 2nd version as a test.
+       $ mc sys$disk:[]1st-make clean  ! ignore any file not found messages
+       $ mc sys$disk:[]1st-make
+
+  Verify your 2nd version by building Make again.
+       $ copy make.exe 2nd-make.exe
+       $ mc sys$disk:[]2nd-make clean
+       $ mc sys$disk:[]2nd-make
+
+
+Running the tests:
+------------------
 
-The default makefiles make looks for are: makefile.vms, gnumakefile,
-makefile., and gnumakefile. .
+  Running the tests on OpenVMS requires the following software to be installed
+  as most of the tests are Unix oriented.
 
-The stat() function and handling of time stamps in VMS is broken, so I
-replaced it with a hack in vmsfunctions.c. I will provide a full rewrite
-somewhere in the future. Be warned, the time resolution inside make is
-less than what vms provides. This might be a problem on the faster Alphas.
+  * Perl 5.18 or later.
+    https://sourceforge.net/projects/vmsperlkit/files/
+  * GNV 2.1.3 + Updates including a minimum of:
+    * Bash 4.3.30
+    * ld_tools 3.0.2
+    * coreutils 8.21
+   https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/
+   https://sourceforge.net/projects/gnv/files/
 
-You can use a : in a filename only if you precede it with a backslash ('\').
-E.g.- hobbes\:[bogas.files]
+   As the test scripts need to create some foreign commands that persist
+   after the test is run, it is recommend that either you use a subprocess or
+   a dedicated login to run the tests.
 
-Make ignores success, informational, or warning errors (-S-, -I-, or
--W-).  But it will stop on -E- and -F- errors. (unless you do something
-to override this in your makefile, or whatever).
+   To get detailed information for running the tests:
 
-Remote stuff isn't implemented yet.
+   $ set default [.tests]
+   $ @run_make_tests help
 
-Multiple line DCL commands, such as "if" statements, must be put inside
-command files.  You can run a command file by using \@.
+   Running the script with no parameters will run all the tests.
 
+   After the the test script has been run once in a session, assuming
+   that you built make in sys$disk:[make], you can redefined the
+   "bin" logical name as follows:
 
-VMS changes made for 3.74.3
+   $ define bin sys$disk:[make],gnv$gnu:[bin]
 
-Lots of default settings are adapted for VMS. See default.c.
+   Then you can use Perl to run the scripts.
 
-Long command lines are now converted to command files.
+   $ perl run_make_tests.pl
 
-Comma (',') as a separator is now allowed. See makefile.vms for an example.
 
--------------------------------------------------------------------------------
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
-This file is part of GNU Make.
+Acknowlegements:
+----------------
 
-GNU Make is free software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the Free Software
-Foundation; either version 3 of the License, or (at your option) any later
-version.
+See NEWS. for details of past changes.
 
-GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  These are the currently known contributers to this port.
 
-You should have received a copy of the GNU General Public License along with
-this program.  If not, see <http://www.gnu.org/licenses/>.
+  Hartmut Becker
+  John Malmberg
+  Michael Gehre
+  John Eisenbraun
+  Klaus Kaempf
+  Mike Moretti
+  John W. Eaton
index e52e406..2da7e94 100644 (file)
@@ -1,11 +1,12 @@
-This version of GNU make has been tested on
-Microsoft Windows 2000/XP/2003/Vista/7/2008.
+This version of GNU make has been tested on:
+  Microsoft Windows 2000/XP/2003/Vista/7/8/10
 It has also been used on Windows 95/98/NT, and on OS/2.
 
-It builds with the MinGW port of GCC (tested with GCC 3.4.2).
+It builds with the MinGW port of GCC (tested with GCC 3.4.2, 4.8.1,
+and 4.9.3).
 
-It also builds with MSVC 2.x, 4.x, 5.x, 6.x, and 2003 as well as
-with .NET 7.x and .NET 2003.
+It also builds with MSVC 2.x, 4.x, 5.x, 6.x, 2003, and 14 (2015) as
+well as with .NET 7.x and .NET 2003.
 
 As of version 4.0, a build with Guile is supported (tested with Guile
 2.0.3).  To build with Guile, you will need, in addition to Guile
@@ -13,32 +14,32 @@ itself, its dependency libraries and the pkg-config program.  The
 latter is used to figure out which compilation and link switches and
 libraries need to be mentioned on the compiler command lines to
 correctly link with Guile.  A Windows port of pkg-config can be found
-on the Windows download page of the GTK+ project:
+on ezwinports site:
 
-  http://www.gtk.org/download/win32.php
+  http://sourceforge.net/projects/ezwinports/
 
 The libraries on which Guile depends can vary depending on your
 version and build of Guile.  At the very least, the Boehm's GC library
 will be needed, and typically also GNU MP, libffi, libunistring, and
 libtool's libltdl.  Whoever built the port of Guile you have should
 also provide you with these dependencies or a URL where to download
-them.
+them.  A precompiled 32-bit Windows build of Guile is available from
+the ezwinports site mentioned above.
 
-The Windows 32-bit port of GNU make is maintained jointly by various
-people.  It was originally made by Rob Tulloh.
+The Windows port of GNU make is maintained jointly by various people.
+It was originally made by Rob Tulloh.
+It is currently maintained by Eli Zaretskii.
 
 
 Do this first, regardless of the build method you choose:
 ---------------------------------------------------------
 
- 1. At the Windows command prompt run:
-
-      if not exist NMakefile copy NMakefile.template NMakefile
-      if not exist config.h copy config.h.W32 config.h
-
-    Then edit config.h to your liking (especially the few shell-related
+ 1. Edit config.h.W32 to your liking (especially the few shell-related
     defines near the end, or HAVE_CASE_INSENSITIVE_FS which corresponds
-    to './configure --enable-case-insensitive-file-system').
+    to './configure --enable-case-insensitive-file-system').  (We don't
+    recommend to define HAVE_CASE_INSENSITIVE_FS, but you may wish to
+    consider that if you have a lot of files whose names are in upper
+    case, while Makefile rules are written for lower-case versions.)
 
 
 Using make_msvc_net2003.vcproj
@@ -57,7 +58,9 @@ Building with (MinGW-)GCC using build_w32.bat
 
         build_w32.bat gcc
 
-    This produces gnumake.exe in the current directory.
+    This produces gnumake.exe in the GccRel directory.
+    If you want a version of GNU make built with debugging enabled,
+    add the --debug option.
 
     The batch file will probe for Guile installation, and will build
     gnumake.exe with Guile if it finds it.  If you have Guile
@@ -77,7 +80,9 @@ Building with (MSVC++-)cl using build_w32.bat or NMakefile
 
         build_w32.bat
 
-    (this produces WinDebug/gnumake.exe and WinRel/gnumake.exe)
+    This produces gnumake.exe in the WinRel directory.
+    If you want a version of GNU make built with debugging enabled,
+    add the --debug option.
 
     ... OR ...
 
@@ -207,7 +212,7 @@ GNU make handling of drive letters in pathnames (PATH, vpath, VPATH):
 GNU make test suite:
 
         I verified all functionality with a slightly modified version
-        of make-test-4.1 (modifications to get test suite to run
+        of make-test-4.2 (modifications to get test suite to run
         on Windows NT). All tests pass in an environment that includes
         sh.exe.  Tests were performed on both Windows NT and Windows 95.
 
@@ -293,7 +298,7 @@ Bug reports:
         is described in the GNU make manual and the base README.
 \f
 -------------------------------------------------------------------------------
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 30d98ac..67e1252 100644 (file)
@@ -96,7 +96,7 @@ SunOS 4.1.x:
 
 \f
 -------------------------------------------------------------------------------
-Copyright (C) 1998-2014 Free Software Foundation, Inc.
+Copyright (C) 1998-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 2b55f22..160af57 100644 (file)
--- a/SMakefile
+++ b/SMakefile
@@ -3,7 +3,7 @@
 # NOTE: If you have no 'make' program at all to process this makefile,
 # run 'build.sh' instead.
 #
-# Copyright (C) 1995-2014 Free Software Foundation, Inc.
+# Copyright (C) 1995-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
@@ -24,9 +24,9 @@
 #
 
 # Ultrix 2.2 make doesn't expand the value of VPATH.
-VPATH = /make-4.1/
+VPATH = /make-4.2/
 # This must repeat the value, because configure will remove 'VPATH = .'.
-srcdir = /make-4.1/
+srcdir = /make-4.2/
 
 CC = sc
 RM = delete
@@ -228,7 +228,7 @@ ar.o: ar.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h dep.h \
+ filedef.h hash.h dep.h
 
 # .deps/arscan.Po
 arscan.o: arscan.c makeint.h config.h \
@@ -241,8 +241,7 @@ commands.o: commands.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h dep.h \
- variable.h job.h output.h \
+ filedef.h hash.h dep.h variable.h job.h output.h \
  commands.h
 
 # .deps/default.Po
@@ -250,7 +249,8 @@ default.o: default.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h variable.h rule.h dep.h job.h output.h \
+ filedef.h hash.h variable.h rule.h dep.h job.h \
+ output.h \
  commands.h
 
 # .deps/dir.Po
@@ -258,7 +258,8 @@ dir.o: dir.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- hash.h filedef.h dep.h \
+ hash.h \
+ filedef.h dep.h \
 
 # .deps/expand.Po
 expand.o: expand.c makeint.h config.h \
@@ -282,8 +283,7 @@ function.o: function.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h \
- variable.h dep.h job.h output.h \
+ filedef.h hash.h variable.h dep.h job.h output.h \
  commands.h debug.h
 
 # .deps/getloadavg.Po
@@ -300,8 +300,7 @@ guile.o: guile.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- debug.h filedef.h hash.h \
- dep.h variable.h \
+ debug.h filedef.h hash.h dep.h variable.h \
  gmk-default.h
 
 # .deps/hash.Po
@@ -316,8 +315,7 @@ implicit.o: implicit.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h rule.h \
- dep.h debug.h variable.h job.h output.h \
+ filedef.h hash.h rule.h dep.h debug.h variable.h job.h output.h \
  commands.h
 
 # .deps/job.Po
@@ -327,23 +325,22 @@ job.o: job.c makeint.h config.h \
  gettext.h \
  job.h output.h \
  debug.h filedef.h hash.h \
- commands.h variable.h
+ commands.h variable.h os.h
 
 # .deps/load.Po
 load.o: load.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- debug.h filedef.h hash.h \
- variable.h
+ debug.h \
filedef.h hash.h variable.h
 
 # .deps/loadapi.Po
 loadapi.o: loadapi.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h \
- variable.h dep.h
+ filedef.h hash.h variable.h dep.h
 
 # .deps/loadavg-getloadavg.Po
 # dummy
@@ -353,8 +350,8 @@ main.o: main.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
filedef.h hash.h dep.h \
- variable.h job.h output.h \
os.h \
filedef.h hash.h dep.h variable.h job.h output.h \
  commands.h rule.h debug.h \
  getopt.h
 
@@ -363,15 +360,22 @@ misc.o: misc.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h dep.h \
- debug.h \
+ filedef.h hash.h dep.h debug.h \
 
 # .deps/output.Po
 output.o: output.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- job.h output.h \
+ job.h \
+ output.h \
+
+# .deps/posixos.Po
+posixos.o: posixos.c makeint.h config.h \
+ gnumake.h \
+ getopt.h \
+ gettext.h \
+ debug.h job.h output.h os.h
 
 # .deps/read.Po
 read.o: read.c makeint.h config.h \
@@ -387,8 +391,7 @@ remake.o: remake.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h job.h \
- output.h \
+ filedef.h hash.h job.h output.h \
  commands.h dep.h variable.h \
  debug.h
 
@@ -401,8 +404,7 @@ remote-stub.o: remote-stub.c makeint.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h job.h \
- output.h \
+ filedef.h hash.h job.h output.h \
  commands.h
 
 # .deps/rule.Po
@@ -445,5 +447,4 @@ vpath.o: vpath.c makeint.h config.h \
  gnumake.h \
  getopt.h \
  gettext.h \
- filedef.h hash.h \
- variable.h
+ filedef.h hash.h variable.h
index 53d7ef1..0ac68aa 100644 (file)
@@ -1,7 +1,7 @@
 dnl acinclude.m4 -- Extra macros needed for GNU make.
 dnl
 dnl Automake will incorporate this into its generated aclocal.m4.
-dnl Copyright (C) 1998-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 1998-2016 Free Software Foundation, Inc.
 dnl This file is part of GNU Make.
 dnl
 dnl GNU Make is free software; you can redistribute it and/or modify it under
index 98f09b6..5389934 100644 (file)
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.15 -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -20,32 +20,63 @@ You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
-# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
-# serial 1 (pkg-config-0.24)
-# 
-# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
+dnl pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
+dnl serial 11 (pkg-config-0.29.1)
+dnl
+dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl     [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+    [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
 AC_DEFUN([PKG_PROG_PKG_CONFIG],
 [m4_pattern_forbid([^_?PKG_[A-Z_]+$])
 m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
@@ -67,18 +98,19 @@ if test -n "$PKG_CONFIG"; then
                PKG_CONFIG=""
        fi
 fi[]dnl
-])# PKG_PROG_PKG_CONFIG
+])dnl PKG_PROG_PKG_CONFIG
 
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists.  Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-# only at the first occurence in configure.ac, so if the first place
-# it's called might be skipped (such as if it is within an "if", you
-# have to call PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
 AC_DEFUN([PKG_CHECK_EXISTS],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 if test -n "$PKG_CONFIG" && \
@@ -88,8 +120,10 @@ m4_ifvaln([$3], [else
   $3])dnl
 fi])
 
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
 m4_define([_PKG_CONFIG],
 [if test -n "$$1"; then
     pkg_cv_[]$1="$$1"
@@ -101,10 +135,11 @@ m4_define([_PKG_CONFIG],
  else
     pkg_failed=untried
 fi[]dnl
-])# _PKG_CONFIG
+])dnl _PKG_CONFIG
 
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
 AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -112,19 +147,17 @@ if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
 else
         _pkg_short_errors_supported=no
 fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
 
 
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
 AC_DEFUN([PKG_CHECK_MODULES],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
@@ -178,9 +211,92 @@ else
         AC_MSG_RESULT([yes])
        $3
 fi[]dnl
-])# PKG_CHECK_MODULES
+])dnl PKG_CHECK_MODULES
+
 
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+    [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+    [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+    [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_INSTALLDIR
+
+
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+    [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+    [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+    [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_NOARCH_INSTALLDIR
+
+
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])dnl PKG_CHECK_VAR
+
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -192,10 +308,10 @@ fi[]dnl
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.14'
+[am__api_version='1.15'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.14.1], [],
+m4_if([$1], [1.15], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -211,12 +327,12 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.14.1])dnl
+[AM_AUTOMAKE_VERSION([1.15])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
-# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -278,7 +394,7 @@ AC_SUBST([AR])dnl
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -323,15 +439,14 @@ AC_SUBST([AR])dnl
 # configured tree to be moved without reconfiguration.
 
 AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 ])
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -362,7 +477,7 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -553,7 +668,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -628,7 +743,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 ])
 
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -652,7 +767,7 @@ fi], [AC_MSG_RESULT([no])])
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -742,8 +857,8 @@ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
 AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
 AC_REQUIRE([AC_PROG_MAKE_SET])dnl
 AC_REQUIRE([AM_SET_LEADING_DOT])dnl
@@ -816,7 +931,11 @@ to "yes", and re-run configure.
 END
     AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
   fi
-fi])
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
 
 dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
 dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
@@ -845,7 +964,7 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -856,7 +975,7 @@ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_co
 # Define $install_sh.
 AC_DEFUN([AM_PROG_INSTALL_SH],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\    *)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -866,7 +985,7 @@ if test x"${install_sh}" != xset; then
 fi
 AC_SUBST([install_sh])])
 
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -887,7 +1006,7 @@ AC_SUBST([am__leading_dot])])
 
 # Check to see how 'make' treats includes.                 -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -937,7 +1056,7 @@ rm -f confinc confmf
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -974,41 +1093,9 @@ else
 fi
 ])
 
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for 'mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl FIXME we are no longer going to remove this! adjust warning
-dnl FIXME message accordingly.
-AC_DIAGNOSE([obsolete],
-[$0: this macro is deprecated, and will soon be removed.
-You should use the Autoconf-provided 'AC][_PROG_MKDIR_P' macro instead,
-and use '$(MKDIR_P)' instead of '$(mkdir_p)'in your Makefile.am files.])
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
-  [[\\/$]]* | ?:[[\\/]]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1037,7 +1124,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1084,7 +1171,7 @@ AC_LANG_POP([C])])
 # For backward compatibility.
 AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1103,7 +1190,7 @@ AC_DEFUN([AM_RUN_LOG],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1184,7 +1271,7 @@ AC_CONFIG_COMMANDS_PRE(
 rm -f conftest.file
 ])
 
-# Copyright (C) 2009-2013 Free Software Foundation, Inc.
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1244,7 +1331,7 @@ AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1272,7 +1359,7 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006-2013 Free Software Foundation, Inc.
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1291,7 +1378,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004-2013 Free Software Foundation, Inc.
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1429,6 +1516,7 @@ m4_include([config/intlmacosx.m4])
 m4_include([config/lib-ld.m4])
 m4_include([config/lib-link.m4])
 m4_include([config/lib-prefix.m4])
+m4_include([config/longlong.m4])
 m4_include([config/nls.m4])
 m4_include([config/po.m4])
 m4_include([config/progtest.m4])
diff --git a/amiga.c b/amiga.c
index 1ef949c..cfd0d08 100644 (file)
--- a/amiga.c
+++ b/amiga.c
@@ -1,5 +1,5 @@
 /* Running commands on Amiga
-Copyright (C) 1995-2014 Free Software Foundation, Inc.
+Copyright (C) 1995-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
diff --git a/amiga.h b/amiga.h
index 00bca4f..afc910a 100644 (file)
--- a/amiga.h
+++ b/amiga.h
@@ -1,5 +1,5 @@
 /* Definitions for amiga specific things
-Copyright (C) 1995-2014 Free Software Foundation, Inc.
+Copyright (C) 1995-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
diff --git a/ar.c b/ar.c
index 675572a..b9c1cf7 100644 (file)
--- a/ar.c
+++ b/ar.c
@@ -1,5 +1,5 @@
 /* Interface to 'ar' archives for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 
 This file is part of GNU Make.
 
@@ -73,7 +73,7 @@ static long int
 ar_member_date_1 (int desc UNUSED, const char *mem, int truncated,
                   long int hdrpos UNUSED, long int datapos UNUSED,
                   long int size UNUSED, long int date,
-                  int uid UNUSED, int gid UNUSED, int mode UNUSED,
+                  int uid UNUSED, int gid UNUSED, unsigned int mode UNUSED,
                   const void *name)
 {
   return ar_name_equal (name, mem, truncated) ? date : 0;
@@ -198,7 +198,7 @@ static long int
 ar_glob_match (int desc UNUSED, const char *mem, int truncated UNUSED,
                long int hdrpos UNUSED, long int datapos UNUSED,
                long int size UNUSED, long int date UNUSED, int uid UNUSED,
-               int gid UNUSED, int mode UNUSED, const void *arg)
+               int gid UNUSED, unsigned int mode UNUSED, const void *arg)
 {
   struct ar_glob_state *state = (struct ar_glob_state *)arg;
 
@@ -224,7 +224,7 @@ ar_glob_match (int desc UNUSED, const char *mem, int truncated UNUSED,
 /* Return nonzero if PATTERN contains any metacharacters.
    Metacharacters can be quoted with backslashes if QUOTE is nonzero.  */
 static int
-glob_pattern_p (const char *pattern, int quote)
+ar_glob_pattern_p (const char *pattern, int quote)
 {
   const char *p;
   int opened = 0;
@@ -267,7 +267,7 @@ ar_glob (const char *arname, const char *member_pattern, unsigned int size)
 #ifdef VMS
   char *vms_member_pattern;
 #endif
-  if (! glob_pattern_p (member_pattern, 1))
+  if (! ar_glob_pattern_p (member_pattern, 1))
     return 0;
 
   /* Scan the archive for matches.
index 24286fd..549fe1e 100644 (file)
--- a/arscan.c
+++ b/arscan.c
@@ -1,5 +1,5 @@
 /* Library function for scanning an archive file.
-Copyright (C) 1987-2014 Free Software Foundation, Inc.
+Copyright (C) 1987-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -38,12 +38,18 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <ssdef.h>
 #include <stsdef.h>
 #include <rmsdef.h>
-globalvalue unsigned int LBR$_HDRTRUNC;
 
-#if __DECC
+/* This symbol should be present in lbrdef.h. */
+#ifndef LBR$_HDRTRUNC
+#pragma extern_model save
+#pragma extern_model globalvalue
+extern unsigned int LBR$_HDRTRUNC;
+#pragma extern_model restore
+#endif
+
 #include <unixlib.h>
 #include <lbr$routines.h>
-#endif
+
 const char *
 vmsify (const char *name, int type);
 
@@ -414,7 +420,8 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
 #ifdef SARMAG
   {
     char buf[SARMAG];
-    register int nread = read (desc, buf, SARMAG);
+    int nread;
+    EINTRLOOP (nread, read (desc, buf, SARMAG));
     if (nread != SARMAG || memcmp (buf, ARMAG, SARMAG))
       {
         (void) close (desc);
@@ -424,8 +431,8 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
 #else
 #ifdef AIAMAG
   {
-    register int nread = read (desc, &fl_header, FL_HSZ);
-
+    int nread;
+    EINTRLOOP (nread, read (desc, &fl_header, FL_HSZ));
     if (nread != FL_HSZ)
       {
         (void) close (desc);
@@ -436,17 +443,20 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
        re-read the header into the "big" structure. */
     if (!memcmp (fl_header.fl_magic, AIAMAGBIG, SAIAMAG))
       {
+        off_t o;
+
         big_archive = 1;
 
         /* seek back to beginning of archive */
-        if (lseek (desc, 0, 0) < 0)
+        EINTRLOOP (o, lseek (desc, 0, 0));
+        if (o < 0)
           {
             (void) close (desc);
             return -2;
           }
 
         /* re-read the header into the "big" structure */
-        nread = read (desc, &fl_header_big, FL_HSZ_BIG);
+        EINTRLOOP (nread, read (desc, &fl_header_big, FL_HSZ_BIG));
         if (nread != FL_HSZ_BIG)
           {
             (void) close (desc);
@@ -469,7 +479,8 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
 #else
     unsigned short int buf;
 #endif
-    register int nread = read (desc, &buf, sizeof (buf));
+    int nread;
+    EINTRLOOP (nread, read (desc, &buf, sizeof (buf)));
     if (nread != sizeof (buf) || buf != ARMAG)
       {
         (void) close (desc);
@@ -536,10 +547,12 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
         int long_name = 0;
 #endif
         long int eltsize;
-        int eltmode;
+        unsigned int eltmode;
         long int fnval;
+        off_t o;
 
-        if (lseek (desc, member_offset, 0) < 0)
+        EINTRLOOP (o, lseek (desc, member_offset, 0));
+        if (o < 0)
           {
             (void) close (desc);
             return -2;
@@ -551,8 +564,8 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
 #ifdef AIAMAGBIG
         if (big_archive)
           {
-            nread = read (desc, &member_header_big,
-                          AR_MEMHDR_SZ(member_header_big) );
+            EINTRLOOP (nread, read (desc, &member_header_big,
+                                    AR_MEMHDR_SZ(member_header_big)));
 
             if (nread != AR_MEMHDR_SZ(member_header_big))
               {
@@ -561,7 +574,7 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
               }
 
             sscanf (member_header_big.ar_namlen, "%4d", &name_len);
-            nread = read (desc, name, name_len);
+            EINTRLOOP (nread, read (desc, name, name_len));
 
             if (nread != name_len)
               {
@@ -583,8 +596,8 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
         else
 #endif
           {
-            nread = read (desc, &member_header,
-                          AR_MEMHDR_SZ(member_header) );
+            EINTRLOOP (nread, read (desc, &member_header,
+                                    AR_MEMHDR_SZ(member_header)));
 
             if (nread != AR_MEMHDR_SZ(member_header))
               {
@@ -593,7 +606,7 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
               }
 
             sscanf (member_header.ar_namlen, "%4d", &name_len);
-            nread = read (desc, name, name_len);
+            EINTRLOOP (nread, read (desc, name, name_len));
 
             if (nread != name_len)
               {
@@ -621,7 +634,7 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
                        eltmode, arg);
 
 #else   /* Not AIAMAG.  */
-        nread = read (desc, &member_header, AR_HDR_SIZE);
+        EINTRLOOP (nread, read (desc, &member_header, AR_HDR_SIZE));
         if (nread == 0)
           /* No data left means end of file; that is OK.  */
           break;
@@ -690,7 +703,7 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
               int namesize = atoi (name + 3);
 
               name = alloca (namesize + 1);
-              nread = read (desc, name, namesize);
+              EINTRLOOP (nread, read (desc, name, namesize));
               if (nread != namesize)
                 {
                   close (desc);
@@ -761,7 +774,7 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg)
             char *limit;
 
             namemap = alloca (eltsize);
-            nread = read (desc, namemap, eltsize);
+            EINTRLOOP (nread, read (desc, namemap, eltsize));
             if (nread != eltsize)
               {
                 (void) close (desc);
@@ -859,7 +872,7 @@ static long int
 ar_member_pos (int desc UNUSED, const char *mem, int truncated,
                long int hdrpos, long int datapos UNUSED, long int size UNUSED,
                long int date UNUSED, int uid UNUSED, int gid UNUSED,
-               int mode UNUSED, const void *name)
+               unsigned int mode UNUSED, const void *name)
 {
   if (!ar_name_equal (name, mem, truncated))
     return 0;
@@ -879,7 +892,8 @@ ar_member_touch (const char *arname, const char *memname)
   long int pos = ar_scan (arname, ar_member_pos, memname);
   int fd;
   struct ar_hdr ar_hdr;
-  int i;
+  off_t o;
+  int r;
   unsigned int ui;
   struct stat statbuf;
 
@@ -888,28 +902,32 @@ ar_member_touch (const char *arname, const char *memname)
   if (!pos)
     return 1;
 
-  fd = open (arname, O_RDWR, 0666);
+  EINTRLOOP (fd, open (arname, O_RDWR, 0666));
   if (fd < 0)
     return -3;
   /* Read in this member's header */
-  if (lseek (fd, pos, 0) < 0)
+  EINTRLOOP (o, lseek (fd, pos, 0));
+  if (o < 0)
     goto lose;
-  if (AR_HDR_SIZE != read (fd, &ar_hdr, AR_HDR_SIZE))
+  EINTRLOOP (r, read (fd, &ar_hdr, AR_HDR_SIZE));
+  if (r != AR_HDR_SIZE)
     goto lose;
   /* Write back the header, thus touching the archive file.  */
-  if (lseek (fd, pos, 0) < 0)
+  EINTRLOOP (o, lseek (fd, pos, 0));
+  if (o < 0)
     goto lose;
-  if (AR_HDR_SIZE != write (fd, &ar_hdr, AR_HDR_SIZE))
+  EINTRLOOP (r, write (fd, &ar_hdr, AR_HDR_SIZE));
+  if (r != AR_HDR_SIZE)
     goto lose;
   /* The file's mtime is the time we we want.  */
-  EINTRLOOP (i, fstat (fd, &statbuf));
-  if (i < 0)
+  EINTRLOOP (r, fstat (fd, &statbuf));
+  if (r < 0)
     goto lose;
 #if defined(ARFMAG) || defined(ARFZMAG) || defined(AIAMAG) || defined(WINDOWS32)
   /* Advance member's time to that time */
   for (ui = 0; ui < sizeof ar_hdr.ar_date; ui++)
     ar_hdr.ar_date[ui] = ' ';
-  sprintf (TOCHAR (ar_hdr.ar_date), "%ld", (long int) statbuf.st_mtime);
+  sprintf (TOCHAR (ar_hdr.ar_date), "%lu", (long unsigned) statbuf.st_mtime);
 #ifdef AIAMAG
   ar_hdr.ar_date[strlen (ar_hdr.ar_date)] = ' ';
 #endif
@@ -917,17 +935,19 @@ ar_member_touch (const char *arname, const char *memname)
   ar_hdr.ar_date = statbuf.st_mtime;
 #endif
   /* Write back this member's header */
-  if (lseek (fd, pos, 0) < 0)
+  EINTRLOOP (o, lseek (fd, pos, 0));
+  if (o < 0)
     goto lose;
-  if (AR_HDR_SIZE != write (fd, &ar_hdr, AR_HDR_SIZE))
+  EINTRLOOP (r, write (fd, &ar_hdr, AR_HDR_SIZE));
+  if (r != AR_HDR_SIZE)
     goto lose;
   close (fd);
   return 0;
 
  lose:
-  i = errno;
+  r = errno;
   close (fd);
-  errno = i;
+  errno = r;
   return -3;
 }
 #endif
@@ -937,7 +957,8 @@ ar_member_touch (const char *arname, const char *memname)
 long int
 describe_member (int desc, const char *name, int truncated,
                  long int hdrpos, long int datapos, long int size,
-                 long int date, int uid, int gid, int mode, const void *arg)
+                 long int date, int uid, int gid, unsigned int mode,
+                 const void *arg)
 {
   extern char *ctime ();
 
index ea5865d..1f24fed 100755 (executable)
@@ -2,7 +2,7 @@
 # Shell script to build GNU Make in the absence of any 'make' program.
 # @configure_input@
 
-# Copyright (C) 1993-2014 Free Software Foundation, Inc.
+# Copyright (C) 1993-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
@@ -52,7 +52,7 @@ defines="-DLOCALEDIR=\"${localedir}\" -DLIBDIR=\"${libdir}\" -DINCLUDEDIR=\"${in
 set -e
 
 # These are all the objects we need to link together.
-objs="ar.${OBJEXT} arscan.${OBJEXT} commands.${OBJEXT} default.${OBJEXT} dir.${OBJEXT} expand.${OBJEXT} file.${OBJEXT} function.${OBJEXT} getopt.${OBJEXT} getopt1.${OBJEXT} guile.${OBJEXT} implicit.${OBJEXT} job.${OBJEXT} load.${OBJEXT} loadapi.${OBJEXT} main.${OBJEXT} misc.${OBJEXT} output.${OBJEXT} read.${OBJEXT} remake.${OBJEXT} rule.${OBJEXT} signame.${OBJEXT} strcache.${OBJEXT} variable.${OBJEXT} version.${OBJEXT} vpath.${OBJEXT} hash.${OBJEXT} remote-${REMOTE}.${OBJEXT} ${extras} ${ALLOCA}"
+objs="ar.${OBJEXT} arscan.${OBJEXT} commands.${OBJEXT} default.${OBJEXT} dir.${OBJEXT} expand.${OBJEXT} file.${OBJEXT} function.${OBJEXT} getopt.${OBJEXT} getopt1.${OBJEXT} guile.${OBJEXT} implicit.${OBJEXT} job.${OBJEXT} load.${OBJEXT} loadapi.${OBJEXT} main.${OBJEXT} misc.${OBJEXT} posixos.${OBJEXT} output.${OBJEXT} read.${OBJEXT} remake.${OBJEXT} rule.${OBJEXT} signame.${OBJEXT} strcache.${OBJEXT} variable.${OBJEXT} version.${OBJEXT} vpath.${OBJEXT} hash.${OBJEXT} remote-${REMOTE}.${OBJEXT} ${extras} ${ALLOCA}"
 
 if [ x"$GLOBLIB" != x ]; then
   objs="$objs glob/fnmatch.${OBJEXT} glob/glob.${OBJEXT}"
old mode 100644 (file)
new mode 100755 (executable)
index 00632a7..59e068b
@@ -1,5 +1,5 @@
 @echo off\r
-rem Copyright (C) 1996-2014 Free Software Foundation, Inc.\r
+rem Copyright (C) 1996-2016 Free Software Foundation, Inc.\r
 rem This file is part of GNU Make.\r
 rem\r
 rem GNU Make is free software; you can redistribute it and/or modify it under\r
@@ -15,283 +15,217 @@ rem
 rem You should have received a copy of the GNU General Public License along\r
 rem with this program.  If not, see <http://www.gnu.org/licenses/>.\r
 \r
-if "%1" == "-h" GoTo Usage\r
-if "%1" == "--help" GoTo Usage\r
-if not exist config.h.W32.template GoTo NotSCM\r
-sed -n "s/^AC_INIT(\[GNU make\],\[\([^]]\+\)\].*/s,%%VERSION%%,\1,g/p" configure.ac > config.h.W32.sed\r
-echo s,%%PACKAGE%%,make,g >> config.h.W32.sed\r
-sed -f config.h.W32.sed config.h.W32.template > config.h.W32\r
-echo static const char *const GUILE_module_defn = ^" \> gmk-default.h\r
-sed -e "s/;.*//" -e "/^[ \t]*$/d" -e "s/\"/\\\\\"/g" -e "s/$/ \\/" gmk-default.scm >> gmk-default.h\r
-echo ^";>> gmk-default.h\r
-:NotSCM\r
-copy config.h.W32 config.h\r
+call :Reset\r
+\r
+if "%1" == "-h" goto Usage\r
+if "%1" == "--help" goto Usage\r
+\r
+set MAKE=gnumake\r
+set GUILE=Y\r
+set COMPILER=msvc\r
 \r
-rem Guile configuration\r
-set GUILECFLAGS=\r
-set GUILELIBS=\r
-set NOGUILE=\r
-set OPT=-O2\r
-set COMPILER=\r
-set PKGMSC=\r
 :ParseSW\r
-if "%1" == "--debug" GoTo SetOpt\r
-if "%1" == "--without-guile" GoTo NoGuile\r
-if "%1" == "gcc" GoTo SetCC\r
-if "%1" == "" GoTo ChkGuile\r
-:SetOpt\r
-set OPT=-O0\r
+if "%1" == "--debug" goto SetDebug\r
+if "%1" == "--without-guile" goto NoGuile\r
+if "%1" == "gcc" goto SetCC\r
+if "%1" == "" goto DoneSW\r
+\r
+:SetDebug\r
+set DEBUG=Y\r
 shift\r
-GoTo ParseSW\r
+goto ParseSW\r
+\r
 :NoGuile\r
-set NOGUILE=Y\r
-echo "Building without Guile"\r
+set GUILE=N\r
+echo Building without Guile\r
 shift\r
-GoTo ParseSW\r
+goto ParseSW\r
+\r
 :SetCC\r
 set COMPILER=gcc\r
-echo "Building with GCC"\r
+echo Building with GCC\r
 shift\r
-GoTo ParseSW\r
+goto ParseSW\r
+\r
 rem Build with Guile is supported only on NT and later versions\r
-:ChkGuile\r
-if "%NOGUILE%" == "Y" GoTo GuileDone\r
-if not "%OS%" == "Windows_NT" GoTo NoGuile\r
-pkg-config --help > guile.tmp 2> NUL\r
-if ERRORLEVEL 1 GoTo NoPkgCfg\r
-echo "Checking for Guile 2.0"\r
-if not "%COMPILER%" == "gcc" set PKGMSC=--msvc-syntax\r
-pkg-config --cflags --short-errors "guile-2.0" > guile.tmp\r
-if not ERRORLEVEL 1 set /P GUILECFLAGS= < guile.tmp\r
-pkg-config --libs --static --short-errors %PKGMSC% "guile-2.0" > guile.tmp\r
-if not ERRORLEVEL 1 set /P GUILELIBS= < guile.tmp\r
-if not "%GUILECFLAGS%" == "" GoTo GuileDone\r
-echo "Checking for Guile 1.8"\r
-pkg-config --cflags --short-errors "guile-1.8" > guile.tmp\r
-if not ERRORLEVEL 1 set /P GUILECFLAGS= < guile.tmp\r
-pkg-config --libs --static --short-errors %PKGMSC% "guile-1.8" > guile.tmp\r
-if not ERRORLEVEL 1 set /P GUILELIBS= < guile.tmp\r
-if not "%GUILECFLAGS%" == "" GoTo GuileDone\r
-echo "No Guile found, building without Guile"\r
-GoTo GuileDone\r
-:NoPkgCfg\r
-echo "pkg-config not found, building without Guile"\r
-:GuileDone\r
-if not "%GUILECFLAGS%" == "" echo "Guile found, building with Guile"\r
-if not "%GUILECFLAGS%" == "" set GUILECFLAGS=%GUILECFLAGS% -DHAVE_GUILE\r
-if "%COMPILER%" == "gcc" if "%OPT%" == "-O0" echo "Building without compiler optimizations"\r
-cd w32\subproc\r
+:DoneSW\r
 echo.\r
-echo "Creating the subproc library"\r
-%ComSpec% /c build.bat\r
-cd ..\..\r
+echo Creating GNU Make for Windows 9X/NT/2K/XP/Vista/7/8\r
+if "%DEBUG%" == "Y" echo Building without compiler optimizations\r
+\r
+if "%COMPILER%" == "gcc" goto GccBuild\r
+\r
+set OUTDIR=.\WinRel\r
+set "OPTS=/O2 /D NDEBUG"\r
+set LINKOPTS=\r
+if "%DEBUG%" == "Y" set OUTDIR=.\WinDebug\r
+if "%DEBUG%" == "Y" set "OPTS=/Zi /Od /D _DEBUG"\r
+if "%DEBUG%" == "Y" set LINKOPTS=/DEBUG\r
+call :Build\r
+goto Done\r
+\r
+:GccBuild\r
+set OUTDIR=.\GccRel\r
+set OPTS=-O2\r
+if "%DEBUG%" == "Y" set OPTS=-O0\r
+if "%DEBUG%" == "Y" set OUTDIR=.\GccDebug\r
+call :Build\r
+goto Done\r
+\r
+:Done\r
+call :Reset\r
+goto :EOF\r
+\r
+:Build\r
+:: Clean the directory if it exists\r
+if exist %OUTDIR%\nul rmdir /S /Q %OUTDIR%\r
+\r
+:: Recreate it\r
+mkdir %OUTDIR%\r
+mkdir %OUTDIR%\glob\r
+mkdir %OUTDIR%\w32\r
+mkdir %OUTDIR%\w32\compat\r
+mkdir %OUTDIR%\w32\subproc\r
+\r
+if "%GUILE%" == "Y" call :ChkGuile\r
 \r
-if exist link.dbg del link.dbg\r
-if exist link.rel del link.rel\r
 echo.\r
-echo "Creating GNU Make for Windows 9X/NT/2K/XP/Vista/7/8"\r
-if "%COMPILER%" == "gcc" GoTo GCCBuild\r
-set make=gnumake\r
+echo Compiling %OUTDIR% version\r
+\r
+if exist config.h.W32.template call :ConfigSCM\r
+copy config.h.W32 %OUTDIR%\config.h\r
+\r
+call :Compile ar\r
+call :Compile arscan\r
+call :Compile commands\r
+call :Compile default\r
+call :Compile dir\r
+call :Compile expand\r
+call :Compile file\r
+call :Compile function\r
+call :Compile getloadavg\r
+call :Compile getopt\r
+call :Compile getopt1\r
+call :Compile glob\fnmatch\r
+call :Compile glob\glob\r
+call :Compile guile GUILE\r
+call :Compile hash\r
+call :Compile implicit\r
+call :Compile job\r
+call :Compile load\r
+call :Compile loadapi\r
+call :Compile main GUILE\r
+call :Compile misc\r
+call :Compile output\r
+call :Compile read\r
+call :Compile remake\r
+call :Compile remote-stub\r
+call :Compile rule\r
+call :Compile signame\r
+call :Compile strcache\r
+call :Compile variable\r
+call :Compile version\r
+call :Compile vpath\r
+call :Compile w32\compat\posixfcn\r
+call :Compile w32\pathstuff\r
+call :Compile w32\subproc\misc\r
+call :Compile w32\subproc\sub_proc\r
+call :Compile w32\subproc\w32err\r
+call :Compile w32\w32os\r
+\r
+if not "%COMPILER%" == "gcc" call :Compile w32\compat\dirent\r
+\r
+call :Link\r
+\r
+echo.\r
+if not exist %OUTDIR%\%MAKE%.exe echo %OUTDIR% build FAILED!\r
+if exist %OUTDIR%\%MAKE%.exe echo %OUTDIR% build succeeded.\r
+goto :EOF\r
+\r
+:Compile\r
+set EXTRAS=\r
+if "%2" == "GUILE" set "EXTRAS=%GUILECFLAGS%"\r
+if "%COMPILER%" == "gcc" goto GccCompile\r
+\r
+:: MSVC Compile\r
+echo on\r
+cl.exe /nologo /MT /W4 /EHsc %OPTS% /I %OUTDIR% /I . /I glob /I w32/include /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR%OUTDIR% /Fp%OUTDIR%\%MAKE%.pch /Fo%OUTDIR%\%1.obj /Fd%OUTDIR%\%MAKE%.pdb %EXTRAS% /c %1.c\r
+@echo off\r
+echo %OUTDIR%\%1.obj >>%OUTDIR%\link.sc\r
+goto :EOF\r
+\r
+:GccCompile\r
+:: GCC Compile\r
 echo on\r
-if not exist .\WinDebug\nul mkdir .\WinDebug\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D TIVOLI /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c variable.c\r
-echo WinDebug\variable.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c rule.c\r
-echo WinDebug\rule.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c remote-stub.c\r
-echo WinDebug\remote-stub.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c commands.c\r
-echo WinDebug\commands.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c file.c\r
-echo WinDebug\file.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c getloadavg.c\r
-echo WinDebug\getloadavg.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c default.c\r
-echo WinDebug\default.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c signame.c\r
-echo WinDebug\signame.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c expand.c\r
-echo WinDebug\expand.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c dir.c\r
-echo WinDebug\dir.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od %GUILECFLAGS% /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c main.c\r
-echo WinDebug\main.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c getopt1.c\r
-echo WinDebug\getopt1.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c job.c\r
-echo WinDebug\job.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c output.c\r
-echo WinDebug\output.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c read.c\r
-echo WinDebug\read.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c version.c\r
-echo WinDebug\version.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c getopt.c\r
-echo WinDebug\getopt.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c arscan.c\r
-echo WinDebug\arscan.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c hash.c\r
-echo WinDebug\hash.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c strcache.c\r
-echo WinDebug\strcache.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c remake.c\r
-echo WinDebug\remake.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c misc.c\r
-echo WinDebug\misc.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c ar.c\r
-echo WinDebug\ar.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c function.c\r
-echo WinDebug\function.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c vpath.c\r
-echo WinDebug\vpath.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c implicit.c\r
-echo WinDebug\implicit.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c loadapi.c\r
-echo WinDebug\loadapi.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c load.c\r
-echo WinDebug\load.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c  .\w32\compat\dirent.c\r
-echo WinDebug\dirent.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c  .\w32\compat\posixfcn.c\r
-echo WinDebug\posixfcn.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c  .\glob\glob.c\r
-echo WinDebug\glob.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c  .\glob\fnmatch.c\r
-echo WinDebug\fnmatch.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c  .\w32\pathstuff.c\r
-echo WinDebug\pathstuff.obj >>link.dbg\r
-cl.exe /nologo /MT /W4 /GX /Zi /YX /Od %GUILECFLAGS% /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c guile.c\r
-echo WinDebug\guile.obj >>link.dbg\r
-:LinkDbg\r
-echo off\r
-echo "Linking WinDebug/%make%.exe"\r
-rem link.exe %GUILELIBS% kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\windebug\subproc.lib /NOLOGO /SUBSYSTEM:console /INCREMENTAL:yes /PDB:.\WinDebug/%make%.pdb /DEBUG /OUT:.\WinDebug/%make%.exe .\WinDebug/variable.obj  .\WinDebug/rule.obj  .\WinDebug/remote-stub.obj  .\WinDebug/commands.obj  .\WinDebug/file.obj  .\WinDebug/getloadavg.obj  .\WinDebug/default.obj  .\WinDebug/signame.obj  .\WinDebug/expand.obj  .\WinDebug/dir.obj  .\WinDebug/main.obj  .\WinDebug/getopt1.obj  .\WinDebug/job.obj  .\WinDebug/output.obj  .\WinDebug/read.obj  .\WinDebug/version.obj  .\WinDebug/getopt.obj  .\WinDebug/arscan.obj  .\WinDebug/remake.obj  .\WinDebug/hash.obj  .\WinDebug/strcache.obj  .\WinDebug/misc.obj  .\WinDebug/ar.obj  .\WinDebug/function.obj  .\WinDebug/vpath.obj  .\WinDebug/implicit.obj  .\WinDebug/dirent.obj  .\WinDebug/glob.obj  .\WinDebug/fnmatch.obj  .\WinDebug/pathstuff.obj\r
-echo %GUILELIBS% kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\windebug\subproc.lib >>link.dbg\r
-link.exe /NOLOGO /SUBSYSTEM:console /INCREMENTAL:yes /PDB:.\WinDebug/%make%.pdb /DEBUG /OUT:.\WinDebug/%make%.exe @link.dbg\r
-if not exist .\WinDebug/%make%.exe echo "WinDebug build failed"\r
-if exist .\WinDebug/%make%.exe echo "WinDebug build succeeded!"\r
-if not exist .\WinRel\nul mkdir .\WinRel\r
+gcc -mthreads -Wall -std=gnu99 -gdwarf-2 -g3 %OPTS% -I%OUTDIR% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H %EXTRAS% -o %OUTDIR%\%1.o -c %1.c\r
+@echo off\r
+goto :EOF\r
+\r
+:Link\r
+echo Linking %OUTDIR%/%MAKE%.exe\r
+if "%COMPILER%" == "gcc" goto GccLink\r
+\r
+:: MSVC Link\r
+echo %GUILELIBS% kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib >>%OUTDIR%\link.sc\r
 echo on\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /D TIVOLI /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c variable.c\r
-echo WinRel\variable.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c rule.c\r
-echo WinRel\rule.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c remote-stub.c\r
-echo WinRel\remote-stub.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c commands.c\r
-echo WinRel\commands.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c file.c\r
-echo WinRel\file.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c getloadavg.c\r
-echo WinRel\getloadavg.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c default.c\r
-echo WinRel\default.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c signame.c\r
-echo WinRel\signame.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c expand.c\r
-echo WinRel\expand.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c dir.c\r
-echo WinRel\dir.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 %GUILECFLAGS% /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c main.c\r
-echo WinRel\main.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c getopt1.c\r
-echo WinRel\getopt1.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c job.c\r
-echo WinRel\job.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c output.c\r
-echo WinRel\output.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c read.c\r
-echo WinRel\read.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c version.c\r
-echo WinRel\version.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c getopt.c\r
-echo WinRel\getopt.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c arscan.c\r
-echo WinRel\arscan.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c remake.c\r
-echo WinRel\remake.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c hash.c\r
-echo WinRel\hash.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c strcache.c\r
-echo WinRel\strcache.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c misc.c\r
-echo WinRel\misc.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c ar.c\r
-echo WinRel\ar.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c function.c\r
-echo WinRel\function.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c vpath.c\r
-echo WinRel\vpath.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c implicit.c\r
-echo WinRel\implicit.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c loadapi.c\r
-echo WinRel\loadapi.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c load.c\r
-echo WinRel\load.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c  .\w32\compat\dirent.c\r
-echo WinRel\dirent.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c  .\w32\compat\posixfcn.c\r
-echo WinRel\posixfcn.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c  .\glob\glob.c\r
-echo WinRel\glob.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c  .\glob\fnmatch.c\r
-echo WinRel\fnmatch.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c  .\w32\pathstuff.c\r
-echo WinRel\pathstuff.obj >>link.rel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 %GUILECFLAGS% /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c guile.c\r
-echo WinRel\guile.obj >>link.rel\r
-:LinkRel\r
-echo off\r
-echo "Linking WinRel/%make%.exe"\r
-rem link.exe %GUILELIBS% kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\winrel\subproc.lib /NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:.\WinRel/%make%.pdb /OUT:.\WinRel/%make%.exe .\WinRel/variable.obj  .\WinRel/rule.obj  .\WinRel/remote-stub.obj  .\WinRel/commands.obj  .\WinRel/file.obj  .\WinRel/getloadavg.obj  .\WinRel/default.obj  .\WinRel/signame.obj  .\WinRel/expand.obj  .\WinRel/dir.obj  .\WinRel/main.obj  .\WinRel/getopt1.obj  .\WinRel/job.obj  .\WinRel/output.obj  .\WinRel/read.obj  .\WinRel/version.obj  .\WinRel/getopt.obj  .\WinRel/arscan.obj  .\WinRel/remake.obj  .\WinRel/misc.obj  .\WinRel/hash.obj  .\WinRel/strcache.obj  .\WinRel/ar.obj  .\WinRel/function.obj  .\WinRel/vpath.obj  .\WinRel/implicit.obj  .\WinRel/dirent.obj  .\WinRel/glob.obj  .\WinRel/fnmatch.obj  .\WinRel/pathstuff.obj\r
-echo %GUILELIBS% kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\winrel\subproc.lib >>link.rel\r
-link.exe /NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:.\WinRel/%make%.pdb /OUT:.\WinRel/%make%.exe @link.rel\r
-if not exist .\WinRel/%make%.exe echo "WinRel build failed"\r
-if exist .\WinRel/%make%.exe echo "WinRel build succeeded!"\r
-set make=\r
-GoTo BuildEnd\r
-:GCCBuild\r
+link.exe /NOLOGO /SUBSYSTEM:console /PDB:%OUTDIR%\%MAKE%.pdb %LINKOPTS% /OUT:%OUTDIR%\%MAKE%.exe @%OUTDIR%\link.sc\r
+@echo off\r
+goto :EOF\r
+\r
+:GccLink\r
+:: GCC Link\r
 echo on\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c variable.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c rule.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c remote-stub.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c commands.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c file.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c getloadavg.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c default.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c signame.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c expand.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c dir.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H %GUILECFLAGS% -c main.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c getopt1.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c job.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c output.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c read.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c version.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c getopt.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c arscan.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c remake.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c hash.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c strcache.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c misc.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ar.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c function.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c vpath.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c implicit.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c loadapi.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c load.c\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ./glob/glob.c -o glob.o\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ./glob/fnmatch.c -o fnmatch.o\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ./w32/pathstuff.c -o pathstuff.o\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ./w32/compat/posixfcn.c -o posixfcn.o\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% %GUILECFLAGS% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c guile.c\r
-:LinkGCC\r
+gcc -mthreads -gdwarf-2 -g3 -o %OUTDIR%\%MAKE%.exe %OUTDIR%\variable.o %OUTDIR%\rule.o %OUTDIR%\remote-stub.o %OUTDIR%\commands.o %OUTDIR%\file.o %OUTDIR%\getloadavg.o %OUTDIR%\default.o %OUTDIR%\signame.o %OUTDIR%\expand.o %OUTDIR%\dir.o %OUTDIR%\main.o %OUTDIR%\getopt1.o %OUTDIR%\guile.o %OUTDIR%\job.o %OUTDIR%\output.o %OUTDIR%\read.o %OUTDIR%\version.o %OUTDIR%\getopt.o %OUTDIR%\arscan.o %OUTDIR%\remake.o %OUTDIR%\misc.o %OUTDIR%\hash.o %OUTDIR%\strcache.o %OUTDIR%\ar.o %OUTDIR%\function.o %OUTDIR%\vpath.o %OUTDIR%\implicit.o %OUTDIR%\loadapi.o %OUTDIR%\load.o %OUTDIR%\glob\glob.o %OUTDIR%\glob\fnmatch.o %OUTDIR%\w32\pathstuff.o %OUTDIR%\w32\compat\posixfcn.o %OUTDIR%\w32\w32os.o %OUTDIR%\w32\subproc\misc.o %OUTDIR%\w32\subproc\sub_proc.o %OUTDIR%\w32\subproc\w32err.o %GUILELIBS% -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -Wl,--out-implib=%OUTDIR%\libgnumake-1.dll.a\r
 @echo off\r
-Rem The version NN of libgnumake-NN.dll.a should be bumped whenever\r
-Rem the API changes in binary-incompatible manner.\r
-@echo on\r
-gcc -mthreads -gdwarf-2 -g3 -o gnumake.exe variable.o rule.o remote-stub.o commands.o file.o getloadavg.o default.o signame.o expand.o dir.o main.o getopt1.o guile.o job.o output.o read.o version.o getopt.o arscan.o remake.o misc.o hash.o strcache.o ar.o function.o vpath.o implicit.o loadapi.o load.o glob.o fnmatch.o pathstuff.o posixfcn.o w32_misc.o sub_proc.o w32err.o %GUILELIBS% -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -Wl,--out-implib=libgnumake-1.dll.a\r
-@GoTo BuildEnd\r
+goto :EOF\r
+\r
+:ConfigSCM\r
+echo Generating config from SCM templates\r
+sed -n "s/^AC_INIT(\[GNU make\],\[\([^]]\+\)\].*/s,%%VERSION%%,\1,g/p" configure.ac > %OUTDIR%\config.h.W32.sed\r
+echo s,%%PACKAGE%%,make,g >> %OUTDIR%\config.h.W32.sed\r
+sed -f %OUTDIR%\config.h.W32.sed config.h.W32.template > config.h.W32\r
+echo static const char *const GUILE_module_defn = ^" \> gmk-default.h\r
+sed -e "s/;.*//" -e "/^[ \t]*$/d" -e "s/\"/\\\\\"/g" -e "s/$/ \\\/" gmk-default.scm >> gmk-default.h\r
+echo ^";>> gmk-default.h\r
+goto :EOF\r
+\r
+:ChkGuile\r
+if not "%OS%" == "Windows_NT" goto NoGuile\r
+pkg-config --help > %OUTDIR%\guile.tmp 2> NUL\r
+if ERRORLEVEL 1 goto NoPkgCfg\r
+\r
+echo Checking for Guile 2.0\r
+if not "%COMPILER%" == "gcc" set PKGMSC=--msvc-syntax\r
+pkg-config --cflags --short-errors "guile-2.0" > %OUTDIR%\guile.tmp\r
+if not ERRORLEVEL 1 set /P GUILECFLAGS= < %OUTDIR%\guile.tmp\r
+\r
+pkg-config --libs --static --short-errors %PKGMSC% "guile-2.0" > %OUTDIR%\guile.tmp\r
+if not ERRORLEVEL 1 set /P GUILELIBS= < %OUTDIR%\guile.tmp\r
+\r
+if not "%GUILECFLAGS%" == "" goto GuileDone\r
+\r
+echo Checking for Guile 1.8\r
+pkg-config --cflags --short-errors "guile-1.8" > %OUTDIR%\guile.tmp\r
+if not ERRORLEVEL 1 set /P GUILECFLAGS= < %OUTDIR%\guile.tmp\r
+\r
+pkg-config --libs --static --short-errors %PKGMSC% "guile-1.8" > %OUTDIR%\guile.tmp\r
+if not ERRORLEVEL 1 set /P GUILELIBS= < %OUTDIR%\guile.tmp\r
+\r
+if not "%GUILECFLAGS%" == "" goto GuileDone\r
+\r
+echo No Guile found, building without Guile\r
+goto GuileDone\r
+\r
+:NoPkgCfg\r
+echo pkg-config not found, building without Guile\r
+\r
+:GuileDone\r
+if "%GUILECFLAGS%" == "" goto :EOF\r
+\r
+echo Guile found, building with Guile\r
+set "GUILECFLAGS=%GUILECFLAGS% -DHAVE_GUILE"\r
+goto :EOF\r
+\r
 :Usage\r
 echo Usage: %0 [options] [gcc]\r
 echo Options:\r
@@ -299,12 +233,18 @@ echo.  --debug           For GCC only, make a debug build
 echo.                    (MSVC build always makes both debug and release)\r
 echo.  --without-guile   Do not compile Guile support even if found\r
 echo.  --help            Display these instructions and exit\r
-:BuildEnd\r
-@echo off\r
-set GUILELIBS=\r
-set GUILECFLAGS=\r
-set PKGMSC=\r
-set OPT=\r
+goto :EOF\r
+\r
+:Reset\r
 set COMPILER=\r
+set DEBUG=\r
+set GUILE=\r
+set GUILECFLAGS=\r
+set GUILELIBS=\r
+set LINKOPTS=\r
+set MAKE=\r
 set NOGUILE=\r
-echo on\r
+set OPTS=\r
+set OUTDIR=\r
+set PKGMSC=\r
+goto :EOF\r
index 7123021..124b93e 100644 (file)
@@ -1,5 +1,5 @@
 /* Command processing for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -26,13 +26,11 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #endif
 
 #if VMS
-# define FILE_LIST_SEPARATOR ','
+# define FILE_LIST_SEPARATOR (vms_comma_separator ? ',' : ' ')
 #else
 # define FILE_LIST_SEPARATOR ' '
 #endif
 
-int remote_kill (int id, int sig);
-
 #ifndef HAVE_UNISTD_H
 int getpid ();
 #endif
@@ -411,10 +409,10 @@ chop_commands (struct commands *cmds)
 
   for (idx = 0; idx < nlines; ++idx)
     {
-      int flags = 0;
+      unsigned char flags = 0;
       const char *p = lines[idx];
 
-      while (isblank (*p) || *p == '-' || *p == '@' || *p == '+')
+      while (ISBLANK (*p) || *p == '-' || *p == '@' || *p == '+')
         switch (*(p++))
           {
           case '+':
@@ -451,7 +449,7 @@ execute_file_commands (struct file *file)
      the commands are nothing but whitespace.  */
 
   for (p = file->cmds->commands; *p != '\0'; ++p)
-    if (!isspace ((unsigned char)*p) && *p != '-' && *p != '@')
+    if (!ISSPACE (*p) && *p != '-' && *p != '@' && *p != '+')
       break;
   if (*p == '\0')
     {
index 0d58f22..18d8c28 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition of data structures describing shell commands for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -19,10 +19,10 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 struct commands
   {
-    gmk_floc fileinfo;          /* Where commands were defined.  */
+    floc fileinfo;              /* Where commands were defined.  */
     char *commands;             /* Commands text.  */
     char **command_lines;       /* Commands chopped up into lines.  */
-    char *lines_flags;          /* One set of flag bits for each line.  */
+    unsigned char *lines_flags; /* One set of flag bits for each line.  */
     unsigned short ncommand_lines;/* Number of command lines.  */
     char recipe_prefix;         /* Recipe prefix for this command set.  */
     unsigned int any_recurse:1; /* Nonzero if any 'lines_flags' elt has */
@@ -34,6 +34,7 @@ struct commands
 #define COMMANDS_SILENT         2 /* Silent: @.  */
 #define COMMANDS_NOERROR        4 /* No errors: -.  */
 
+RETSIGTYPE fatal_error_signal (int sig);
 void execute_file_commands (struct file *file);
 void print_commands (const struct commands *cmds);
 void delete_child_targets (struct child *child);
index e3d6ee8..ccf6aa1 100644 (file)
@@ -1,5 +1,5 @@
 /* config.h -- hand-massaged for Amiga                                  -*-C-*-
-Copyright (C) 1995-2014 Free Software Foundation, Inc.
+Copyright (C) 1995-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -177,7 +177,7 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #define PACKAGE "make"
 
 /* Version of this package (needed by automake) */
-#define VERSION "4.1"
+#define VERSION "4.2"
 
 /* Define to the name of the SCCS 'get' command.  */
 #define SCCS_GET "get"
index d20953e..1bf57ea 100644 (file)
@@ -1,6 +1,6 @@
 /* config.h-vms. Generated by hand by Klaus Kämpf <kkaempf@rmi.de>      -*-C-*-
 
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -217,7 +217,7 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #define PACKAGE "make"
 
 /* Version of this package (needed by automake) */
-#define VERSION "4.1"
+#define VERSION "4.2"
 
 /* Define to the name of the SCCS 'get' command.  */
 /* #undef SCCS_GET */
index a525520..4a412a2 100644 (file)
@@ -1,6 +1,6 @@
 /* config.h.W32 -- hand-massaged config.h file for Windows builds       -*-C-*-
 
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -384,7 +384,7 @@ char *ttyname (int);
 #define PACKAGE_URL "http://www.gnu.org/software/make/"
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "4.1"
+#define PACKAGE_VERSION "4.2"
 
 /* Define to the character that separates directories in PATH. */
 #define PATH_SEPARATOR_CHAR ';'
@@ -436,7 +436,7 @@ char *ttyname (int);
 /* #undef UMAX4_3 */
 
 /* Version number of package */
-#define VERSION "4.1"
+#define VERSION "4.2"
 
 /* Define if using the dmalloc debugging malloc package */
 /* #undef WITH_DMALLOC */
index 664fbc2..4c26fb5 100644 (file)
 /* Use case insensitive file names */
 #undef HAVE_CASE_INSENSITIVE_FS
 
-/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the
    CoreFoundation framework. */
 #undef HAVE_CFLOCALECOPYCURRENT
 
-/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
    the CoreFoundation framework. */
 #undef HAVE_CFPREFERENCESCOPYAPPVALUE
 
 /* Define to 1 if you have the `fileno' function. */
 #undef HAVE_FILENO
 
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
 /* Define to 1 if you have the `getcwd' function. */
 #undef HAVE_GETCWD
 
 /* Define to 1 if you have the `pipe' function. */
 #undef HAVE_PIPE
 
+/* Define to 1 if you have the `pselect' function. */
+#undef HAVE_PSELECT
+
 /* Define to 1 if you have the `pstat_getdynamic' function. */
 #undef HAVE_PSTAT_GETDYNAMIC
 
 /* Define to 1 if you have the <sys/resource.h> header file. */
 #undef HAVE_SYS_RESOURCE_H
 
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #undef HAVE_SYS_STAT_H
 
 /* Define to 1 if you have the `ttyname' function. */
 #undef HAVE_TTYNAME
 
+/* Define to 1 if the system has the type `uintmax_t'. */
+#undef HAVE_UINTMAX_T
+
 /* Define to 1 if you have the 'union wait' type in <sys/wait.h>. */
 #undef HAVE_UNION_WAIT
 
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
+/* Define to 1 if the system has the type 'unsigned long long int'. */
+#undef HAVE_UNSIGNED_LONG_LONG_INT
+
+/* Define to 1 if you have the `vfork' function. */
+#undef HAVE_VFORK
+
+/* Define to 1 if you have the <vfork.h> header file. */
+#undef HAVE_VFORK_H
+
 /* Define to 1 if you have the `wait3' function. */
 #undef HAVE_WAIT3
 
 /* Define to 1 if you have the `waitpid' function. */
 #undef HAVE_WAITPID
 
+/* Define to 1 if `fork' works. */
+#undef HAVE_WORKING_FORK
+
+/* Define to 1 if `vfork' works. */
+#undef HAVE_WORKING_VFORK
+
 /* Build host information. */
 #undef MAKE_HOST
 
 /* Define to `int' if <sys/types.h> doesn't define. */
 #undef gid_t
 
+/* Define to `long int' if <sys/types.h> does not define. */
+#undef off_t
+
 /* Define to `int' if <sys/types.h> does not define. */
 #undef pid_t
 
 /* Define to `unsigned int' if <sys/types.h> does not define. */
 #undef size_t
 
+/* Define to `int' if <sys/types.h> does not define. */
+#undef ssize_t
+
 /* Define to `int' if <sys/types.h> doesn't define. */
 #undef uid_t
 
-/* Define uintmax_t if not defined in <stdint.h> or <inttypes.h>. */
+/* Define to the widest unsigned integer type if <stdint.h> and <inttypes.h>
+   do not define. */
 #undef uintmax_t
+
+/* Define as `fork' if `vfork' does not work. */
+#undef vfork
index 396c234..7bce036 100644 (file)
@@ -1,5 +1,5 @@
 # -*-Makefile-*-, or close enough
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
index 8ebc4fd..19fd6b5 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # -*-Makefile-*-, or close enough
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
 # You should have received a copy of the GNU General Public License along with
 # this program.  If not, see <http://www.gnu.org/licenses/>.
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -95,20 +105,19 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = config
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ar-lib \
-       compile config.guess config.rpath config.sub depcomp \
-       install-sh missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/dospaths.m4 \
        $(top_srcdir)/config/gettext.m4 $(top_srcdir)/config/iconv.m4 \
        $(top_srcdir)/config/intlmacosx.m4 \
        $(top_srcdir)/config/lib-ld.m4 \
        $(top_srcdir)/config/lib-link.m4 \
-       $(top_srcdir)/config/lib-prefix.m4 $(top_srcdir)/config/nls.m4 \
+       $(top_srcdir)/config/lib-prefix.m4 \
+       $(top_srcdir)/config/longlong.m4 $(top_srcdir)/config/nls.m4 \
        $(top_srcdir)/config/po.m4 $(top_srcdir)/config/progtest.m4 \
        $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -133,6 +142,8 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in ar-lib compile config.guess \
+       config.rpath config.sub depcomp install-sh missing
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
@@ -205,6 +216,7 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
 REMOTE = @REMOTE@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
@@ -256,6 +268,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -279,7 +292,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign config/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign config/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -447,6 +459,8 @@ uninstall-am:
        maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
        pdf-am ps ps-am tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # Autoconf / automake know how to handle this directory.
 
index fe2301e..463b9ec 100755 (executable)
@@ -4,7 +4,7 @@
 me=ar-lib
 scriptversion=2012-03-01.08; # UTC
 
-# Copyright (C) 2010-2013 Free Software Foundation, Inc.
+# Copyright (C) 2010-2014 Free Software Foundation, Inc.
 # Written by Peter Rosin <peda@lysator.liu.se>.
 #
 # This program is free software; you can redistribute it and/or modify
index 531136b..a85b723 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2012-10-14.11; # UTC
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
index 1f5c50c..c4bd827 100644 (file)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
+#   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2014-03-23'
+timestamp='2016-05-15'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -24,12 +24,12 @@ timestamp='2014-03-23'
 # program.  This Exception is an additional permission under section 7
 # of the GNU General Public License, version 3 ("GPLv3").
 #
-# Originally written by Per Bothner.
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 #
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
 
 
 me=`echo "$0" | sed -e 's,.*/,,'`
@@ -50,7 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,19 +168,29 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # Note: NetBSD doesn't particularly care about the vendor
        # portion of the name.  We always set it to "unknown".
        sysctl="sysctl -n hw.machine_arch"
-       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+           /sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || \
+           echo unknown)`
        case "${UNAME_MACHINE_ARCH}" in
            armeb) machine=armeb-unknown ;;
            arm*) machine=arm-unknown ;;
            sh3el) machine=shl-unknown ;;
            sh3eb) machine=sh-unknown ;;
            sh5el) machine=sh5le-unknown ;;
+           earmv*)
+               arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+               endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+               machine=${arch}${endian}-unknown
+               ;;
            *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
        esac
        # The Operating System including object format, if it has switched
-       # to ELF recently, or will in the future.
+       # to ELF recently (or will in the future) and ABI.
        case "${UNAME_MACHINE_ARCH}" in
+           earm*)
+               os=netbsdelf
+               ;;
            arm*|i386|m68k|ns32k|sh3*|sparc|vax)
                eval $set_cc_for_build
                if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
@@ -197,6 +207,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                os=netbsd
                ;;
        esac
+       # Determine ABI tags.
+       case "${UNAME_MACHINE_ARCH}" in
+           earm*)
+               expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+               abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+               ;;
+       esac
        # The OS release
        # Debian GNU/NetBSD machines have a different userland, and
        # thus, need a distinct triplet. However, they do not need
@@ -207,13 +224,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                release='-gnu'
                ;;
            *)
-               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
                ;;
        esac
        # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
        # contains redundant information, the shorter form:
        # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-       echo "${machine}-${os}${release}"
+       echo "${machine}-${os}${release}${abi}"
        exit ;;
     *:Bitrig:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -223,6 +240,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
        echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
        exit ;;
+    *:LibertyBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+       exit ;;
     *:ekkoBSD:*:*)
        echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
        exit ;;
@@ -235,6 +256,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:MirBSD:*:*)
        echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
        exit ;;
+    *:Sortix:*:*)
+       echo ${UNAME_MACHINE}-unknown-sortix
+       exit ;;
     alpha:OSF1:*:*)
        case $UNAME_RELEASE in
        *4.0)
@@ -251,42 +275,42 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
        case "$ALPHA_CPU_TYPE" in
            "EV4 (21064)")
-               UNAME_MACHINE="alpha" ;;
+               UNAME_MACHINE=alpha ;;
            "EV4.5 (21064)")
-               UNAME_MACHINE="alpha" ;;
+               UNAME_MACHINE=alpha ;;
            "LCA4 (21066/21068)")
-               UNAME_MACHINE="alpha" ;;
+               UNAME_MACHINE=alpha ;;
            "EV5 (21164)")
-               UNAME_MACHINE="alphaev5" ;;
+               UNAME_MACHINE=alphaev5 ;;
            "EV5.6 (21164A)")
-               UNAME_MACHINE="alphaev56" ;;
+               UNAME_MACHINE=alphaev56 ;;
            "EV5.6 (21164PC)")
-               UNAME_MACHINE="alphapca56" ;;
+               UNAME_MACHINE=alphapca56 ;;
            "EV5.7 (21164PC)")
-               UNAME_MACHINE="alphapca57" ;;
+               UNAME_MACHINE=alphapca57 ;;
            "EV6 (21264)")
-               UNAME_MACHINE="alphaev6" ;;
+               UNAME_MACHINE=alphaev6 ;;
            "EV6.7 (21264A)")
-               UNAME_MACHINE="alphaev67" ;;
+               UNAME_MACHINE=alphaev67 ;;
            "EV6.8CB (21264C)")
-               UNAME_MACHINE="alphaev68" ;;
+               UNAME_MACHINE=alphaev68 ;;
            "EV6.8AL (21264B)")
-               UNAME_MACHINE="alphaev68" ;;
+               UNAME_MACHINE=alphaev68 ;;
            "EV6.8CX (21264D)")
-               UNAME_MACHINE="alphaev68" ;;
+               UNAME_MACHINE=alphaev68 ;;
            "EV6.9A (21264/EV69A)")
-               UNAME_MACHINE="alphaev69" ;;
+               UNAME_MACHINE=alphaev69 ;;
            "EV7 (21364)")
-               UNAME_MACHINE="alphaev7" ;;
+               UNAME_MACHINE=alphaev7 ;;
            "EV7.9 (21364A)")
-               UNAME_MACHINE="alphaev79" ;;
+               UNAME_MACHINE=alphaev79 ;;
        esac
        # A Pn.n version is a patched version.
        # A Vn.n version is a released version.
        # A Tn.n version is a released field test version.
        # A Xn.n version is an unreleased experimental baselevel.
        # 1.2 uses "1.2" for uname -r.
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
        # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
        exitcode=$?
        trap '' 0
@@ -359,16 +383,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
        eval $set_cc_for_build
-       SUN_ARCH="i386"
+       SUN_ARCH=i386
        # If there is a compiler, see if it is configured for 64-bit objects.
        # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
        # This test works for both compilers.
-       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+       if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
            if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
                grep IS_64BIT_ARCH >/dev/null
            then
-               SUN_ARCH="x86_64"
+               SUN_ARCH=x86_64
            fi
        fi
        echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
@@ -393,7 +417,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        exit ;;
     sun*:*:4.2BSD:*)
        UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
        case "`/bin/arch`" in
            sun3)
                echo m68k-sun-sunos${UNAME_RELEASE}
@@ -579,8 +603,9 @@ EOF
        else
                IBM_ARCH=powerpc
        fi
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
+       if [ -x /usr/bin/lslpp ] ; then
+               IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+                          awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
        else
                IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
        fi
@@ -617,13 +642,13 @@ EOF
                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
                    case "${sc_cpu_version}" in
-                     523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                     528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                     523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+                     528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
                      532)                      # CPU_PA_RISC2_0
                        case "${sc_kernel_bits}" in
-                         32) HP_ARCH="hppa2.0n" ;;
-                         64) HP_ARCH="hppa2.0w" ;;
-                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                         32) HP_ARCH=hppa2.0n ;;
+                         64) HP_ARCH=hppa2.0w ;;
+                         '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
                        esac ;;
                    esac
                fi
@@ -662,11 +687,11 @@ EOF
                    exit (0);
                }
 EOF
-                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
                    test -z "$HP_ARCH" && HP_ARCH=hppa
                fi ;;
        esac
-       if [ ${HP_ARCH} = "hppa2.0w" ]
+       if [ ${HP_ARCH} = hppa2.0w ]
        then
            eval $set_cc_for_build
 
@@ -679,12 +704,12 @@ EOF
            # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
            # => hppa64-hp-hpux11.23
 
-           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+           if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
                grep -q __LP64__
            then
-               HP_ARCH="hppa2.0w"
+               HP_ARCH=hppa2.0w
            else
-               HP_ARCH="hppa64"
+               HP_ARCH=hppa64
            fi
        fi
        echo ${HP_ARCH}-hp-hpux${HPUX_REV}
@@ -789,14 +814,14 @@ EOF
        echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+       FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+       FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     5000:UNIX_System_V:4.*:*)
-       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+       FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
@@ -878,7 +903,7 @@ EOF
        exit ;;
     *:GNU/*:*:*)
        # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
        exit ;;
     i*86:Minix:*:*)
        echo ${UNAME_MACHINE}-pc-minix
@@ -901,7 +926,7 @@ EOF
          EV68*) UNAME_MACHINE=alphaev68 ;;
        esac
        objdump --private-headers /bin/sh | grep -q ld.so.1
-       if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+       if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     arc:Linux:*:* | arceb:Linux:*:*)
@@ -932,6 +957,9 @@ EOF
     crisv32:Linux:*:*)
        echo ${UNAME_MACHINE}-axis-linux-${LIBC}
        exit ;;
+    e2k:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
     frv:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
@@ -944,6 +972,9 @@ EOF
     ia64:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
+    k1om:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
     m32r*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
@@ -1020,7 +1051,7 @@ EOF
        echo ${UNAME_MACHINE}-dec-linux-${LIBC}
        exit ;;
     x86_64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
        exit ;;
     xtensa*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
@@ -1099,7 +1130,7 @@ EOF
        # uname -m prints for DJGPP always 'pc', but it prints nothing about
        # the processor, so we play safe by assuming i586.
        # Note: whatever this is, it MUST be the same as what config.sub
-       # prints for the "djgpp" host, or else GDB configury will decide that
+       # prints for the "djgpp" host, or else GDB configure will decide that
        # this is a cross-build.
        echo i586-pc-msdosdjgpp
        exit ;;
@@ -1248,6 +1279,9 @@ EOF
     SX-8R:SUPER-UX:*:*)
        echo sx8r-nec-superux${UNAME_RELEASE}
        exit ;;
+    SX-ACE:SUPER-UX:*:*)
+       echo sxace-nec-superux${UNAME_RELEASE}
+       exit ;;
     Power*:Rhapsody:*:*)
        echo powerpc-apple-rhapsody${UNAME_RELEASE}
        exit ;;
@@ -1261,9 +1295,9 @@ EOF
            UNAME_PROCESSOR=powerpc
        fi
        if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-           if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
                if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                   (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+                   (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
                    grep IS_64BIT_ARCH >/dev/null
                then
                    case $UNAME_PROCESSOR in
@@ -1285,7 +1319,7 @@ EOF
        exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
        UNAME_PROCESSOR=`uname -p`
-       if test "$UNAME_PROCESSOR" = "x86"; then
+       if test "$UNAME_PROCESSOR" = x86; then
                UNAME_PROCESSOR=i386
                UNAME_MACHINE=pc
        fi
@@ -1316,7 +1350,7 @@ EOF
        # "uname -m" is not consistent, so use $cputype instead. 386
        # is converted to i386 for consistency with other x86
        # operating systems.
-       if test "$cputype" = "386"; then
+       if test "$cputype" = 386; then
            UNAME_MACHINE=i386
        else
            UNAME_MACHINE="$cputype"
@@ -1358,7 +1392,7 @@ EOF
        echo i386-pc-xenix
        exit ;;
     i*86:skyos:*:*)
-       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
        exit ;;
     i*86:rdos:*:*)
        echo ${UNAME_MACHINE}-pc-rdos
@@ -1369,23 +1403,25 @@ EOF
     x86_64:VMkernel:*:*)
        echo ${UNAME_MACHINE}-unknown-esx
        exit ;;
+    amd64:Isilon\ OneFS:*:*)
+       echo x86_64-unknown-onefs
+       exit ;;
 esac
 
 cat >&2 <<EOF
 $0: unable to guess system type
 
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite
+config.guess and config.sub with the latest versions from:
 
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches@gnu.org to
+provide the necessary information to handle your system.
 
 config.guess timestamp = $timestamp
 
index 17298f2..b625621 100755 (executable)
@@ -2,7 +2,7 @@
 # Output a system dependent set of variables, describing how to set the
 # run time search path of shared libraries in an executable.
 #
-#   Copyright 1996-2010 Free Software Foundation, Inc.
+#   Copyright 1996-2014 Free Software Foundation, Inc.
 #   Taken from GNU libtool, 2001
 #   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 #
@@ -25,7 +25,7 @@
 #   known workaround is to choose shorter directory names for the build
 #   directory and/or the installation directory.
 
-# All known linkers require a `.a' archive for static linking (except MSVC,
+# All known linkers require a '.a' archive for static linking (except MSVC,
 # which needs '.lib').
 libext=a
 shrext=.so
@@ -57,13 +57,6 @@ else
     aix*)
       wl='-Wl,'
       ;;
-    darwin*)
-      case $cc_basename in
-        xlc*)
-          wl='-Wl,'
-          ;;
-      esac
-      ;;
     mingw* | cygwin* | pw32* | os2* | cegcc*)
       ;;
     hpux9* | hpux10* | hpux11*)
@@ -72,9 +65,7 @@ else
     irix5* | irix6* | nonstopux*)
       wl='-Wl,'
       ;;
-    newsos6)
-      ;;
-    linux* | k*bsd*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
       case $cc_basename in
         ecc*)
           wl='-Wl,'
@@ -85,17 +76,26 @@ else
         lf95*)
           wl='-Wl,'
           ;;
-        pgcc | pgf77 | pgf90)
+        nagfor*)
+          wl='-Wl,-Wl,,'
+          ;;
+        pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
           wl='-Wl,'
           ;;
         ccc*)
           wl='-Wl,'
           ;;
+        xl* | bgxl* | bgf* | mpixl*)
+          wl='-Wl,'
+          ;;
         como)
           wl='-lopt='
           ;;
         *)
           case `$CC -V 2>&1 | sed 5q` in
+            *Sun\ F* | *Sun*Fortran*)
+              wl=
+              ;;
             *Sun\ C*)
               wl='-Wl,'
               ;;
@@ -103,13 +103,24 @@ else
           ;;
       esac
       ;;
+    newsos6)
+      ;;
+    *nto* | *qnx*)
+      ;;
     osf3* | osf4* | osf5*)
       wl='-Wl,'
       ;;
     rdos*)
       ;;
     solaris*)
-      wl='-Wl,'
+      case $cc_basename in
+        f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+          wl='-Qoption ld '
+          ;;
+        *)
+          wl='-Wl,'
+          ;;
+      esac
       ;;
     sunos4*)
       wl='-Qoption ld '
@@ -171,15 +182,14 @@ if test "$with_gnu_ld" = yes; then
       fi
       ;;
     amigaos*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we cannot use
-      # them.
-      ld_shlibs=no
+      case "$host_cpu" in
+        powerpc)
+          ;;
+        m68k)
+          hardcode_libdir_flag_spec='-L$libdir'
+          hardcode_minus_L=yes
+          ;;
+      esac
       ;;
     beos*)
       if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
@@ -198,11 +208,13 @@ if test "$with_gnu_ld" = yes; then
         ld_shlibs=no
       fi
       ;;
+    haiku*)
+      ;;
     interix[3-9]*)
       hardcode_direct=no
       hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
       ;;
-    gnu* | linux* | k*bsd*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
         :
       else
@@ -325,10 +337,14 @@ else
       fi
       ;;
     amigaos*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      # see comment about different semantics on the GNU ld section
-      ld_shlibs=no
+      case "$host_cpu" in
+        powerpc)
+          ;;
+        m68k)
+          hardcode_libdir_flag_spec='-L$libdir'
+          hardcode_minus_L=yes
+          ;;
+      esac
       ;;
     bsdi[45]*)
       ;;
@@ -342,29 +358,16 @@ else
       ;;
     darwin* | rhapsody*)
       hardcode_direct=no
-      if test "$GCC" = yes ; then
+      if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
         :
       else
-        case $cc_basename in
-          xlc*)
-            ;;
-          *)
-            ld_shlibs=no
-            ;;
-        esac
+        ld_shlibs=no
       fi
       ;;
     dgux*)
       hardcode_libdir_flag_spec='-L$libdir'
       ;;
-    freebsd1*)
-      ld_shlibs=no
-      ;;
-    freebsd2.2*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      ;;
-    freebsd2*)
+    freebsd2.[01]*)
       hardcode_direct=yes
       hardcode_minus_L=yes
       ;;
@@ -420,6 +423,8 @@ else
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
       hardcode_libdir_separator=:
       ;;
+    *nto* | *qnx*)
+      ;;
     openbsd*)
       if test -f /usr/libexec/ld.so; then
         hardcode_direct=yes
@@ -515,7 +520,12 @@ case "$host_os" in
     library_names_spec='$libname$shrext'
     ;;
   amigaos*)
-    library_names_spec='$libname.a'
+    case "$host_cpu" in
+      powerpc*)
+        library_names_spec='$libname$shrext' ;;
+      m68k)
+        library_names_spec='$libname.a' ;;
+    esac
     ;;
   beos*)
     library_names_spec='$libname$shrext'
@@ -534,19 +544,18 @@ case "$host_os" in
   dgux*)
     library_names_spec='$libname$shrext'
     ;;
-  freebsd1*)
+  freebsd[23].*)
+    library_names_spec='$libname$shrext$versuffix'
     ;;
   freebsd* | dragonfly*)
-    case "$host_os" in
-      freebsd[123]*)
-        library_names_spec='$libname$shrext$versuffix' ;;
-      *)
-        library_names_spec='$libname$shrext' ;;
-    esac
+    library_names_spec='$libname$shrext'
     ;;
   gnu*)
     library_names_spec='$libname$shrext'
     ;;
+  haiku*)
+    library_names_spec='$libname$shrext'
+    ;;
   hpux9* | hpux10* | hpux11*)
     case $host_cpu in
       ia64*)
@@ -582,7 +591,7 @@ case "$host_os" in
     ;;
   linux*oldld* | linux*aout* | linux*coff*)
     ;;
-  linux* | k*bsd*-gnu)
+  linux* | k*bsd*-gnu | kopensolaris*-gnu)
     library_names_spec='$libname$shrext'
     ;;
   knetbsd*-gnu)
@@ -594,7 +603,7 @@ case "$host_os" in
   newsos6)
     library_names_spec='$libname$shrext'
     ;;
-  nto-qnx*)
+  *nto* | *qnx*)
     library_names_spec='$libname$shrext'
     ;;
   openbsd*)
@@ -625,6 +634,9 @@ case "$host_os" in
   sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
     library_names_spec='$libname$shrext'
     ;;
+  tpf*)
+    library_names_spec='$libname$shrext'
+    ;;
   uts4*)
     library_names_spec='$libname$shrext'
     ;;
index d4c8338..6d86a1e 100644 (file)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
+#   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2014-09-26'
+timestamp='2016-05-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -25,7 +25,7 @@ timestamp='2014-09-26'
 # of the GNU General Public License, version 3 ("GPLv3").
 
 
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -33,7 +33,7 @@ timestamp='2014-09-26'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -53,8 +53,7 @@ timestamp='2014-09-26'
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
@@ -68,7 +67,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,7 +116,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
   linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
@@ -255,12 +254,13 @@ case $basic_machine in
        | arc | arceb \
        | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
        | avr | avr32 \
+       | ba \
        | be32 | be64 \
        | bfin \
        | c4x | c8051 | clipper \
        | d10v | d30v | dlx | dsp16xx \
-       | epiphany \
-       | fido | fr30 | frv \
+       | e2k | epiphany \
+       | fido | fr30 | frv | ft32 \
        | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
        | hexagon \
        | i370 | i860 | i960 | ia64 \
@@ -305,7 +305,7 @@ case $basic_machine in
        | riscv32 | riscv64 \
        | rl78 | rx \
        | score \
-       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
        | sh64 | sh64le \
        | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
        | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -313,6 +313,7 @@ case $basic_machine in
        | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
        | ubicom32 \
        | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+       | visium \
        | we32k \
        | x86 | xc16x | xstormy16 | xtensa \
        | z8k | z80)
@@ -375,12 +376,13 @@ case $basic_machine in
        | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
        | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
        | avr-* | avr32-* \
+       | ba-* \
        | be32-* | be64-* \
        | bfin-* | bs2000-* \
        | c[123]* | c30-* | [cjt]90-* | c4x-* \
        | c8051-* | clipper-* | craynv-* | cydra-* \
        | d10v-* | d30v-* | dlx-* \
-       | elxsi-* \
+       | e2k-* | elxsi-* \
        | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
        | h8300-* | h8500-* \
        | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -427,12 +429,13 @@ case $basic_machine in
        | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
        | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
        | pyramid-* \
+       | riscv32-* | riscv64-* \
        | rl78-* | romp-* | rs6000-* | rx-* \
        | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
        | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
        | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
        | sparclite-* \
-       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
        | tahoe-* \
        | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
        | tile*-* \
@@ -440,6 +443,7 @@ case $basic_machine in
        | ubicom32-* \
        | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
        | vax-* \
+       | visium-* \
        | we32k-* \
        | x86-* | x86_64-* | xc16x-* | xps100-* \
        | xstormy16-* | xtensa*-* \
@@ -516,6 +520,9 @@ case $basic_machine in
                basic_machine=i386-pc
                os=-aros
                ;;
+       asmjs)
+               basic_machine=asmjs-unknown
+               ;;
        aux)
                basic_machine=m68k-apple
                os=-aux
@@ -1371,11 +1378,11 @@ case $os in
              | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
              | -sym* | -kopensolaris* | -plan9* \
              | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* | -aros* \
+             | -aos* | -aros* | -cloudabi* | -sortix* \
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
              | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
              | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -bitrig* | -openbsd* | -solidbsd* \
+             | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
              | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
              | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
@@ -1391,7 +1398,8 @@ case $os in
              | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
              | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
              | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+             | -onefs* | -tirtos* | -phoenix*)
        # Remember, each alternative MUST END IN *, to match a version number.
                ;;
        -qnx*)
@@ -1523,6 +1531,8 @@ case $os in
                ;;
        -nacl*)
                ;;
+       -ios)
+               ;;
        -none)
                ;;
        *)
index 4ebd5b3..fc98710 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2013-05-30.07; # UTC
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 92fb540..9aa9814 100644 (file)
@@ -1,7 +1,7 @@
 # Test if the system uses DOS-style pathnames (drive specs and backslashes)
 # By Paul Smith <psmith@gnu.org>.  Based on dos.m4 by Jim Meyering.
 #
-# Copyright (C) 1993-2014 Free Software Foundation, Inc.
+# Copyright (C) 1993-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
index f84e6a5..be247bf 100644 (file)
@@ -1,5 +1,5 @@
-# gettext.m4 serial 63 (gettext-0.18)
-dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
+# gettext.m4 serial 66 (gettext-0.18.2)
+dnl Copyright (C) 1995-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -35,7 +35,7 @@ dnl    will be ignored.  If NEEDSYMBOL is specified and is
 dnl    'need-formatstring-macros', then GNU gettext implementations that don't
 dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
 dnl INTLDIR is used to find the intl libraries.  If empty,
-dnl    the value `$(top_builddir)/intl/' is used.
+dnl    the value '$(top_builddir)/intl/' is used.
 dnl
 dnl The result of the configuration is one of three cases:
 dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
@@ -97,7 +97,7 @@ AC_DEFUN([AM_GNU_GETTEXT],
     AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
   ])
 
-  dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+  dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation.
   gt_INTL_MACOSX
 
   dnl Set USE_NLS.
@@ -157,12 +157,18 @@ changequote([,])dnl
         fi
 
         AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
-         [AC_TRY_LINK([#include <libintl.h>
+         [AC_LINK_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[
+#include <libintl.h>
 $gt_revision_test_code
 extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;],
-            [bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+extern int *_nl_domain_bindings;
+               ]],
+               [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+               ]])],
             [eval "$gt_func_gnugettext_libc=yes"],
             [eval "$gt_func_gnugettext_libc=no"])])
 
@@ -183,35 +189,47 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_b
             gt_save_LIBS="$LIBS"
             LIBS="$LIBS $LIBINTL"
             dnl Now see whether libintl exists and does not depend on libiconv.
-            AC_TRY_LINK([#include <libintl.h>
+            AC_LINK_IFELSE(
+              [AC_LANG_PROGRAM(
+                 [[
+#include <libintl.h>
 $gt_revision_test_code
 extern int _nl_msg_cat_cntr;
 extern
 #ifdef __cplusplus
 "C"
 #endif
-const char *_nl_expand_alias (const char *);],
-              [bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+const char *_nl_expand_alias (const char *);
+                 ]],
+                 [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+                 ]])],
               [eval "$gt_func_gnugettext_libintl=yes"],
               [eval "$gt_func_gnugettext_libintl=no"])
             dnl Now see whether libintl exists and depends on libiconv.
             if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
               LIBS="$LIBS $LIBICONV"
-              AC_TRY_LINK([#include <libintl.h>
+              AC_LINK_IFELSE(
+                [AC_LANG_PROGRAM(
+                   [[
+#include <libintl.h>
 $gt_revision_test_code
 extern int _nl_msg_cat_cntr;
 extern
 #ifdef __cplusplus
 "C"
 #endif
-const char *_nl_expand_alias (const char *);],
-                [bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
-               [LIBINTL="$LIBINTL $LIBICONV"
-                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
-                eval "$gt_func_gnugettext_libintl=yes"
-               ])
+const char *_nl_expand_alias (const char *);
+                   ]],
+                   [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+                   ]])],
+                [LIBINTL="$LIBINTL $LIBICONV"
+                 LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                 eval "$gt_func_gnugettext_libintl=yes"
+                ])
             fi
             CPPFLAGS="$gt_save_CPPFLAGS"
             LIBS="$gt_save_LIBS"])
index e2041b9..4e37363 100644 (file)
@@ -1,5 +1,5 @@
-# iconv.m4 serial 11 (gettext-0.18.1)
-dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
+# iconv.m4 serial 19 (gettext-0.18.2)
+dnl Copyright (C) 2000-2002, 2007-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -30,27 +30,35 @@ AC_DEFUN([AM_ICONV_LINK],
   dnl Add $INCICONV to CPPFLAGS before performing the following checks,
   dnl because if the user has installed libiconv and not disabled its use
   dnl via --without-libiconv-prefix, he wants to use it. The first
-  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed.
   am_save_CPPFLAGS="$CPPFLAGS"
   AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
 
   AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
-    AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
-      [iconv_t cd = iconv_open("","");
-       iconv(cd,NULL,NULL,NULL,NULL);
-       iconv_close(cd);],
+    AC_LINK_IFELSE(
+      [AC_LANG_PROGRAM(
+         [[
+#include <stdlib.h>
+#include <iconv.h>
+         ]],
+         [[iconv_t cd = iconv_open("","");
+           iconv(cd,NULL,NULL,NULL,NULL);
+           iconv_close(cd);]])],
       [am_cv_func_iconv=yes])
     if test "$am_cv_func_iconv" != yes; then
       am_save_LIBS="$LIBS"
       LIBS="$LIBS $LIBICONV"
-      AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
-        [iconv_t cd = iconv_open("","");
-         iconv(cd,NULL,NULL,NULL,NULL);
-         iconv_close(cd);],
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[
+#include <stdlib.h>
+#include <iconv.h>
+           ]],
+           [[iconv_t cd = iconv_open("","");
+             iconv(cd,NULL,NULL,NULL,NULL);
+             iconv_close(cd);]])],
         [am_cv_lib_iconv=yes]
         [am_cv_func_iconv=yes])
       LIBS="$am_save_LIBS"
@@ -58,33 +66,43 @@ AC_DEFUN([AM_ICONV_LINK],
   ])
   if test "$am_cv_func_iconv" = yes; then
     AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
-      dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
+      dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11,
+      dnl Solaris 10.
       am_save_LIBS="$LIBS"
       if test $am_cv_lib_iconv = yes; then
         LIBS="$LIBS $LIBICONV"
       fi
-      AC_TRY_RUN([
+      am_cv_func_iconv_works=no
+      for ac_iconv_const in '' 'const'; do
+        AC_RUN_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[
 #include <iconv.h>
 #include <string.h>
-int main ()
-{
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+             ]],
+             [[int result = 0;
   /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
      returns.  */
   {
     iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
     if (cd_utf8_to_88591 != (iconv_t)(-1))
       {
-        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
         char buf[10];
-        const char *inptr = input;
+        ICONV_CONST char *inptr = input;
         size_t inbytesleft = strlen (input);
         char *outptr = buf;
         size_t outbytesleft = sizeof (buf);
         size_t res = iconv (cd_utf8_to_88591,
-                            (char **) &inptr, &inbytesleft,
+                            &inptr, &inbytesleft,
                             &outptr, &outbytesleft);
         if (res == 0)
-          return 1;
+          result |= 1;
+        iconv_close (cd_utf8_to_88591);
       }
   }
   /* Test against Solaris 10 bug: Failures are not distinguishable from
@@ -93,17 +111,37 @@ int main ()
     iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
     if (cd_ascii_to_88591 != (iconv_t)(-1))
       {
-        static const char input[] = "\263";
+        static ICONV_CONST char input[] = "\263";
         char buf[10];
-        const char *inptr = input;
+        ICONV_CONST char *inptr = input;
         size_t inbytesleft = strlen (input);
         char *outptr = buf;
         size_t outbytesleft = sizeof (buf);
         size_t res = iconv (cd_ascii_to_88591,
-                            (char **) &inptr, &inbytesleft,
+                            &inptr, &inbytesleft,
                             &outptr, &outbytesleft);
         if (res == 0)
-          return 1;
+          result |= 2;
+        iconv_close (cd_ascii_to_88591);
+      }
+  }
+  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304";
+        static char buf[2] = { (char)0xDE, (char)0xAD };
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = 1;
+        char *outptr = buf;
+        size_t outbytesleft = 1;
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+          result |= 4;
+        iconv_close (cd_88591_to_utf8);
       }
   }
 #if 0 /* This bug could be worked around by the caller.  */
@@ -112,17 +150,18 @@ int main ()
     iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
     if (cd_88591_to_utf8 != (iconv_t)(-1))
       {
-        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
         char buf[50];
-        const char *inptr = input;
+        ICONV_CONST char *inptr = input;
         size_t inbytesleft = strlen (input);
         char *outptr = buf;
         size_t outbytesleft = sizeof (buf);
         size_t res = iconv (cd_88591_to_utf8,
-                            (char **) &inptr, &inbytesleft,
+                            &inptr, &inbytesleft,
                             &outptr, &outbytesleft);
         if ((int)res > 0)
-          return 1;
+          result |= 8;
+        iconv_close (cd_88591_to_utf8);
       }
   }
 #endif
@@ -136,13 +175,16 @@ int main ()
       && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
       /* Try HP-UX names.  */
       && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
-    return 1;
-  return 0;
-}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
-        [case "$host_os" in
-           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
-           *)            am_cv_func_iconv_works="guessing yes" ;;
-         esac])
+    result |= 16;
+  return result;
+]])],
+          [am_cv_func_iconv_works=yes], ,
+          [case "$host_os" in
+             aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+             *)            am_cv_func_iconv_works="guessing yes" ;;
+           esac])
+        test "$am_cv_func_iconv_works" = no || break
+      done
       LIBS="$am_save_LIBS"
     ])
     case "$am_cv_func_iconv_works" in
@@ -183,32 +225,47 @@ m4_define([gl_iconv_AC_DEFUN],
   m4_version_prereq([2.64],
     [[AC_DEFUN_ONCE(
         [$1], [$2])]],
-    [[AC_DEFUN(
-        [$1], [$2])]]))
+    [m4_ifdef([gl_00GNULIB],
+       [[AC_DEFUN_ONCE(
+           [$1], [$2])]],
+       [[AC_DEFUN(
+           [$1], [$2])]])]))
 gl_iconv_AC_DEFUN([AM_ICONV],
 [
   AM_ICONV_LINK
   if test "$am_cv_func_iconv" = yes; then
     AC_MSG_CHECKING([for iconv declaration])
     AC_CACHE_VAL([am_cv_proto_iconv], [
-      AC_TRY_COMPILE([
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[
 #include <stdlib.h>
 #include <iconv.h>
 extern
 #ifdef __cplusplus
 "C"
 #endif
-#if defined(__STDC__) || defined(__cplusplus)
+#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
 #else
 size_t iconv();
 #endif
-], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
+           ]],
+           [[]])],
+        [am_cv_proto_iconv_arg1=""],
+        [am_cv_proto_iconv_arg1="const"])
       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
     am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
     AC_MSG_RESULT([
          $am_cv_proto_iconv])
     AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
       [Define as const if the declaration of iconv() needs const.])
+    dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
+    m4_ifdef([gl_ICONV_H_DEFAULTS],
+      [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
+       if test -n "$am_cv_proto_iconv_arg1"; then
+         ICONV_CONST="const"
+       fi
+      ])
   fi
 ])
index 377bb86..59990a1 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2011-11-20.07; # UTC
+scriptversion=2014-09-12.12; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -41,19 +41,15 @@ scriptversion=2011-11-20.07; # UTC
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 
+tab='  '
 nl='
 '
-IFS=" ""       $nl"
+IFS=" $tab$nl"
 
-# set DOITPROG to echo to test this script
+# Set DOITPROG to "echo" to test this script.
 
-# Don't use :- since 4.3BSD and earlier shells don't like it.
 doit=${DOITPROG-}
-if test -z "$doit"; then
-  doit_exec=exec
-else
-  doit_exec=$doit
-fi
+doit_exec=${doit:-exec}
 
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
@@ -68,17 +64,6 @@ mvprog=${MVPROG-mv}
 rmprog=${RMPROG-rm}
 stripprog=${STRIPPROG-strip}
 
-posix_glob='?'
-initialize_posix_glob='
-  test "$posix_glob" != "?" || {
-    if (set -f) 2>/dev/null; then
-      posix_glob=
-    else
-      posix_glob=:
-    fi
-  }
-'
-
 posix_mkdir=
 
 # Desired mode of installed file.
@@ -97,7 +82,7 @@ dir_arg=
 dst_arg=
 
 copy_on_change=false
-no_target_directory=
+is_target_a_directory=possibly
 
 usage="\
 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -137,46 +122,57 @@ while test $# -ne 0; do
     -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-       shift;;
+        shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-       case $mode in
-         *' '* | *'    '* | *'
-'*       | *'*'* | *'?'* | *'['*)
-           echo "$0: invalid mode: $mode" >&2
-           exit 1;;
-       esac
-       shift;;
+        case $mode in
+          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+            echo "$0: invalid mode: $mode" >&2
+            exit 1;;
+        esac
+        shift;;
 
     -o) chowncmd="$chownprog $2"
-       shift;;
+        shift;;
 
     -s) stripcmd=$stripprog;;
 
-    -t) dst_arg=$2
-       # Protect names problematic for 'test' and other utilities.
-       case $dst_arg in
-         -* | [=\(\)!]) dst_arg=./$dst_arg;;
-       esac
-       shift;;
+    -t)
+        is_target_a_directory=always
+        dst_arg=$2
+        # Protect names problematic for 'test' and other utilities.
+        case $dst_arg in
+          -* | [=\(\)!]) dst_arg=./$dst_arg;;
+        esac
+        shift;;
 
-    -T) no_target_directory=true;;
+    -T) is_target_a_directory=never;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    --)        shift
-       break;;
+    --) shift
+        break;;
 
-    -*)        echo "$0: invalid option: $1" >&2
-       exit 1;;
+    -*) echo "$0: invalid option: $1" >&2
+        exit 1;;
 
     *)  break;;
   esac
   shift
 done
 
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+  if test -n "$dst_arg"; then
+    echo "$0: target directory not allowed when installing a directory." >&2
+    exit 1
+  fi
+fi
+
 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
   # When -d is used, all remaining arguments are directories to create.
   # When -t is used, the destination is already specified.
@@ -208,6 +204,15 @@ if test $# -eq 0; then
 fi
 
 if test -z "$dir_arg"; then
+  if test $# -gt 1 || test "$is_target_a_directory" = always; then
+    if test ! -d "$dst_arg"; then
+      echo "$0: $dst_arg: Is not a directory." >&2
+      exit 1
+    fi
+  fi
+fi
+
+if test -z "$dir_arg"; then
   do_exit='(exit $ret); exit $ret'
   trap "ret=129; $do_exit" 1
   trap "ret=130; $do_exit" 2
@@ -223,16 +228,16 @@ if test -z "$dir_arg"; then
 
     *[0-7])
       if test -z "$stripcmd"; then
-       u_plus_rw=
+        u_plus_rw=
       else
-       u_plus_rw='% 200'
+        u_plus_rw='% 200'
       fi
       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
     *)
       if test -z "$stripcmd"; then
-       u_plus_rw=
+        u_plus_rw=
       else
-       u_plus_rw=,u+rw
+        u_plus_rw=,u+rw
       fi
       cp_umask=$mode$u_plus_rw;;
   esac
@@ -269,41 +274,15 @@ do
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
     if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-       echo "$0: $dst_arg: Is a directory" >&2
-       exit 1
+      if test "$is_target_a_directory" = never; then
+        echo "$0: $dst_arg: Is a directory" >&2
+        exit 1
       fi
       dstdir=$dst
       dst=$dstdir/`basename "$src"`
       dstdir_status=0
     else
-      # Prefer dirname, but fall back on a substitute if dirname fails.
-      dstdir=`
-       (dirname "$dst") 2>/dev/null ||
-       expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-            X"$dst" : 'X\(//\)[^/]' \| \
-            X"$dst" : 'X\(//\)$' \| \
-            X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
-       echo X"$dst" |
-           sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-                  s//\1/
-                  q
-                }
-                /^X\(\/\/\)[^/].*/{
-                  s//\1/
-                  q
-                }
-                /^X\(\/\/\)$/{
-                  s//\1/
-                  q
-                }
-                /^X\(\/\).*/{
-                  s//\1/
-                  q
-                }
-                s/.*/./; q'
-      `
-
+      dstdir=`dirname "$dst"`
       test -d "$dstdir"
       dstdir_status=$?
     fi
@@ -314,74 +293,81 @@ do
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
-       # Create intermediate dirs using mode 755 as modified by the umask.
-       # This is like FreeBSD 'install' as of 1997-10-28.
-       umask=`umask`
-       case $stripcmd.$umask in
-         # Optimize common cases.
-         *[2367][2367]) mkdir_umask=$umask;;
-         .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-         *[0-7])
-           mkdir_umask=`expr $umask + 22 \
-             - $umask % 100 % 40 + $umask % 20 \
-             - $umask % 10 % 4 + $umask % 2
-           `;;
-         *) mkdir_umask=$umask,go-w;;
-       esac
-
-       # With -d, create the new directory with the user-specified mode.
-       # Otherwise, rely on $mkdir_umask.
-       if test -n "$dir_arg"; then
-         mkdir_mode=-m$mode
-       else
-         mkdir_mode=
-       fi
-
-       posix_mkdir=false
-       case $umask in
-         *[123567][0-7][0-7])
-           # POSIX mkdir -p sets u+wx bits regardless of umask, which
-           # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-           ;;
-         *)
-           tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-           trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-           if (umask $mkdir_umask &&
-               exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-           then
-             if test -z "$dir_arg" || {
-                  # Check for POSIX incompatibilities with -m.
-                  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                  # other-writable bit of parent directory when it shouldn't.
-                  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                  ls_ld_tmpdir=`ls -ld "$tmpdir"`
-                  case $ls_ld_tmpdir in
-                    d????-?r-*) different_mode=700;;
-                    d????-?--*) different_mode=755;;
-                    *) false;;
-                  esac &&
-                  $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-                    ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-                    test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-                  }
-                }
-             then posix_mkdir=:
-             fi
-             rmdir "$tmpdir/d" "$tmpdir"
-           else
-             # Remove any dirs left behind by ancient mkdir implementations.
-             rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-           fi
-           trap '' 0;;
-       esac;;
+        # Create intermediate dirs using mode 755 as modified by the umask.
+        # This is like FreeBSD 'install' as of 1997-10-28.
+        umask=`umask`
+        case $stripcmd.$umask in
+          # Optimize common cases.
+          *[2367][2367]) mkdir_umask=$umask;;
+          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+          *[0-7])
+            mkdir_umask=`expr $umask + 22 \
+              - $umask % 100 % 40 + $umask % 20 \
+              - $umask % 10 % 4 + $umask % 2
+            `;;
+          *) mkdir_umask=$umask,go-w;;
+        esac
+
+        # With -d, create the new directory with the user-specified mode.
+        # Otherwise, rely on $mkdir_umask.
+        if test -n "$dir_arg"; then
+          mkdir_mode=-m$mode
+        else
+          mkdir_mode=
+        fi
+
+        posix_mkdir=false
+        case $umask in
+          *[123567][0-7][0-7])
+            # POSIX mkdir -p sets u+wx bits regardless of umask, which
+            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+            ;;
+          *)
+            # $RANDOM is not portable (e.g. dash);  use it when possible to
+            # lower collision chance
+            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+            # As "mkdir -p" follows symlinks and we work in /tmp possibly;  so
+            # create the $tmpdir first (and fail if unsuccessful) to make sure
+            # that nobody tries to guess the $tmpdir name.
+            if (umask $mkdir_umask &&
+                $mkdirprog $mkdir_mode "$tmpdir" &&
+                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+            then
+              if test -z "$dir_arg" || {
+                   # Check for POSIX incompatibilities with -m.
+                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                   # other-writable bit of parent directory when it shouldn't.
+                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                   test_tmpdir="$tmpdir/a"
+                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+                   case $ls_ld_tmpdir in
+                     d????-?r-*) different_mode=700;;
+                     d????-?--*) different_mode=755;;
+                     *) false;;
+                   esac &&
+                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                   }
+                 }
+              then posix_mkdir=:
+              fi
+              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+            else
+              # Remove any dirs left behind by ancient mkdir implementations.
+              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+            fi
+            trap '' 0;;
+        esac;;
     esac
 
     if
       $posix_mkdir && (
-       umask $mkdir_umask &&
-       $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+        umask $mkdir_umask &&
+        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
       )
     then :
     else
@@ -391,53 +377,51 @@ do
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-       /*) prefix='/';;
-       [-=\(\)!]*) prefix='./';;
-       *)  prefix='';;
+        /*) prefix='/';;
+        [-=\(\)!]*) prefix='./';;
+        *)  prefix='';;
       esac
 
-      eval "$initialize_posix_glob"
-
       oIFS=$IFS
       IFS=/
-      $posix_glob set -f
+      set -f
       set fnord $dstdir
       shift
-      $posix_glob set +f
+      set +f
       IFS=$oIFS
 
       prefixes=
 
       for d
       do
-       test X"$d" = X && continue
-
-       prefix=$prefix$d
-       if test -d "$prefix"; then
-         prefixes=
-       else
-         if $posix_mkdir; then
-           (umask=$mkdir_umask &&
-            $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-           # Don't fail if two instances are running concurrently.
-           test -d "$prefix" || exit 1
-         else
-           case $prefix in
-             *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-             *) qprefix=$prefix;;
-           esac
-           prefixes="$prefixes '$qprefix'"
-         fi
-       fi
-       prefix=$prefix/
+        test X"$d" = X && continue
+
+        prefix=$prefix$d
+        if test -d "$prefix"; then
+          prefixes=
+        else
+          if $posix_mkdir; then
+            (umask=$mkdir_umask &&
+             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+            # Don't fail if two instances are running concurrently.
+            test -d "$prefix" || exit 1
+          else
+            case $prefix in
+              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+              *) qprefix=$prefix;;
+            esac
+            prefixes="$prefixes '$qprefix'"
+          fi
+        fi
+        prefix=$prefix/
       done
 
       if test -n "$prefixes"; then
-       # Don't fail if two instances are running concurrently.
-       (umask $mkdir_umask &&
-        eval "\$doit_exec \$mkdirprog $prefixes") ||
-         test -d "$dstdir" || exit 1
-       obsolete_mkdir_used=true
+        # Don't fail if two instances are running concurrently.
+        (umask $mkdir_umask &&
+         eval "\$doit_exec \$mkdirprog $prefixes") ||
+          test -d "$dstdir" || exit 1
+        obsolete_mkdir_used=true
       fi
     fi
   fi
@@ -472,15 +456,12 @@ do
 
     # If -C, don't bother to copy if it wouldn't change the file.
     if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"    2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
-
-       eval "$initialize_posix_glob" &&
-       $posix_glob set -f &&
+       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
+       set -f &&
        set X $old && old=:$2:$4:$5:$6 &&
        set X $new && new=:$2:$4:$5:$6 &&
-       $posix_glob set +f &&
-
+       set +f &&
        test "$old" = "$new" &&
        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     then
@@ -493,24 +474,24 @@ do
       # to itself, or perhaps because mv is so ancient that it does not
       # support -f.
       {
-       # Now remove or move aside any old file at destination location.
-       # We try this two ways since rm can't unlink itself on some
-       # systems and the destination file might be busy for other
-       # reasons.  In this case, the final cleanup might fail but the new
-       # file should still install successfully.
-       {
-         test ! -f "$dst" ||
-         $doit $rmcmd -f "$dst" 2>/dev/null ||
-         { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-           { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-         } ||
-         { echo "$0: cannot unlink or rename $dst" >&2
-           (exit 1); exit 1
-         }
-       } &&
-
-       # Now rename the file to the real destination.
-       $doit $mvcmd "$dsttmp" "$dst"
+        # Now remove or move aside any old file at destination location.
+        # We try this two ways since rm can't unlink itself on some
+        # systems and the destination file might be busy for other
+        # reasons.  In this case, the final cleanup might fail but the new
+        # file should still install successfully.
+        {
+          test ! -f "$dst" ||
+          $doit $rmcmd -f "$dst" 2>/dev/null ||
+          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+          } ||
+          { echo "$0: cannot unlink or rename $dst" >&2
+            (exit 1); exit 1
+          }
+        } &&
+
+        # Now rename the file to the real destination.
+        $doit $mvcmd "$dsttmp" "$dst"
       }
     fi || exit 1
 
index dd91025..8a045f6 100644 (file)
@@ -1,5 +1,5 @@
-# intlmacosx.m4 serial 3 (gettext-0.18)
-dnl Copyright (C) 2004-2010 Free Software Foundation, Inc.
+# intlmacosx.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2004-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -13,35 +13,40 @@ dnl by the GNU Library General Public License, and the rest of the GNU
 dnl gettext package package is covered by the GNU General Public License.
 dnl They are *not* in the public domain.
 
-dnl Checks for special options needed on MacOS X.
+dnl Checks for special options needed on Mac OS X.
 dnl Defines INTL_MACOSX_LIBS.
 AC_DEFUN([gt_INTL_MACOSX],
 [
-  dnl Check for API introduced in MacOS X 10.2.
+  dnl Check for API introduced in Mac OS X 10.2.
   AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
     [gt_cv_func_CFPreferencesCopyAppValue],
     [gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
-     AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
-       [CFPreferencesCopyAppValue(NULL, NULL)],
+     AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <CoreFoundation/CFPreferences.h>]],
+          [[CFPreferencesCopyAppValue(NULL, NULL)]])],
        [gt_cv_func_CFPreferencesCopyAppValue=yes],
        [gt_cv_func_CFPreferencesCopyAppValue=no])
      LIBS="$gt_save_LIBS"])
   if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
     AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
-      [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+      [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
   fi
-  dnl Check for API introduced in MacOS X 10.3.
+  dnl Check for API introduced in Mac OS X 10.3.
   AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
     [gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
-     AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
+     AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <CoreFoundation/CFLocale.h>]],
+          [[CFLocaleCopyCurrent();]])],
        [gt_cv_func_CFLocaleCopyCurrent=yes],
        [gt_cv_func_CFLocaleCopyCurrent=no])
      LIBS="$gt_save_LIBS"])
   if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
     AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
-      [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+      [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
   fi
   INTL_MACOSX_LIBS=
   if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
index ebb3052..ddc569f 100644 (file)
@@ -1,50 +1,56 @@
-# lib-ld.m4 serial 4 (gettext-0.18)
-dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc.
+# lib-ld.m4 serial 6
+dnl Copyright (C) 1996-2003, 2009-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 dnl Subroutines of libtool.m4,
-dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-dnl with libtool.m4.
+dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid
+dnl collision with libtool.m4.
 
-dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no.
 AC_DEFUN([AC_LIB_PROG_LD_GNU],
 [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
 case `$LD -v 2>&1 </dev/null` in
 *GNU* | *'with BFD'*)
-  acl_cv_prog_gnu_ld=yes ;;
+  acl_cv_prog_gnu_ld=yes
+  ;;
 *)
-  acl_cv_prog_gnu_ld=no ;;
+  acl_cv_prog_gnu_ld=no
+  ;;
 esac])
 with_gnu_ld=$acl_cv_prog_gnu_ld
 ])
 
-dnl From libtool-1.4. Sets the variable LD.
+dnl From libtool-2.4. Sets the variable LD.
 AC_DEFUN([AC_LIB_PROG_LD],
-[AC_ARG_WITH([gnu-ld],
-[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
+[AC_REQUIRE([AC_PROG_CC])dnl
 AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+        [assume the C compiler uses GNU ld [default=no]])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
 # Prepare PATH_SEPARATOR.
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
+
 ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by GCC])
+  AC_MSG_CHECKING([for ld used by $CC])
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -54,11 +60,11 @@ if test "$GCC" = yes; then
   esac
   case $ac_prog in
     # Accept absolute paths.
-    [[\\/]* | [A-Za-z]:[\\/]*)]
-      [re_direlt='/[^/][^/]*/\.\./']
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
+      while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
         ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
       done
       test -z "$LD" && LD="$ac_prog"
@@ -79,23 +85,26 @@ else
 fi
 AC_CACHE_VAL([acl_cv_path_LD],
 [if test -z "$LD"; then
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
+    IFS="$acl_save_ifs"
     test -z "$ac_dir" && ac_dir=.
     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
       acl_cv_path_LD="$ac_dir/$ac_prog"
       # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some GNU ld's only accept -v.
+      # but apparently some variants of GNU ld only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
       *GNU* | *'with BFD'*)
-        test "$with_gnu_ld" != no && break ;;
+        test "$with_gnu_ld" != no && break
+        ;;
       *)
-        test "$with_gnu_ld" != yes && break ;;
+        test "$with_gnu_ld" != yes && break
+        ;;
       esac
     fi
   done
-  IFS="$ac_save_ifs"
+  IFS="$acl_save_ifs"
 else
   acl_cv_path_LD="$LD" # Let the user override the test with a path.
 fi])
index c73bd8e..3522d99 100644 (file)
@@ -1,5 +1,5 @@
-# lib-link.m4 serial 21 (gettext-0.18)
-dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
+# lib-link.m4 serial 26 (gettext-0.18.2)
+dnl Copyright (C) 2001-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -18,9 +18,9 @@ AC_DEFUN([AC_LIB_LINKFLAGS],
 [
   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
   AC_REQUIRE([AC_LIB_RPATH])
-  pushdef([Name],[translit([$1],[./-], [___])])
-  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([Name],[m4_translit([$1],[./+-], [____])])
+  pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+                                   [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
   AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
     AC_LIB_LINKFLAGS_BODY([$1], [$2])
     ac_cv_lib[]Name[]_libs="$LIB[]NAME"
@@ -58,9 +58,9 @@ AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
 [
   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
   AC_REQUIRE([AC_LIB_RPATH])
-  pushdef([Name],[translit([$1],[./-], [___])])
-  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([Name],[m4_translit([$1],[./+-], [____])])
+  pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+                                   [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
 
   dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
   dnl accordingly.
@@ -85,7 +85,8 @@ AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
       *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
       *)       LIBS="$LIB[]NAME $LIBS" ;;
     esac
-    AC_TRY_LINK([$3], [$4],
+    AC_LINK_IFELSE(
+      [AC_LANG_PROGRAM([[$3]], [[$4]])],
       [ac_cv_lib[]Name=yes],
       [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
     LIBS="$ac_save_LIBS"
@@ -115,6 +116,8 @@ AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
 dnl Determine the platform dependent parameters needed to use rpath:
 dnl   acl_libext,
 dnl   acl_shlibext,
+dnl   acl_libname_spec,
+dnl   acl_library_names_spec,
 dnl   acl_hardcode_libdir_flag_spec,
 dnl   acl_hardcode_libdir_separator,
 dnl   acl_hardcode_direct,
@@ -157,15 +160,15 @@ dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
 dnl macro call that searches for libname.
 AC_DEFUN([AC_LIB_FROMPACKAGE],
 [
-  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+                                   [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
   define([acl_frompackage_]NAME, [$2])
   popdef([NAME])
   pushdef([PACK],[$2])
-  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
-                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+                                     [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
   define([acl_libsinpackage_]PACKUP,
-    m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1])
+    m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1])
   popdef([PACKUP])
   popdef([PACK])
 ])
@@ -178,14 +181,14 @@ dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
 AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
 [
   AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
-  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+                                   [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
   pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
-  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
-                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+                                     [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
   pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
   dnl Autoconf >= 2.61 supports dots in --with options.
-  pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)])
+  pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)])
   dnl By default, look in $includedir and $libdir.
   use_additional=yes
   AC_LIB_WITH_FINAL_PREFIX([
@@ -242,7 +245,7 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
         names_already_handled="$names_already_handled $name"
         dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
         dnl or AC_LIB_HAVE_LINKFLAGS call.
-        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
         eval value=\"\$HAVE_LIB$uppername\"
         if test -n "$value"; then
           if test "$value" = yes; then
index 1601cea..31f49e4 100644 (file)
@@ -1,5 +1,5 @@
 # lib-prefix.m4 serial 7 (gettext-0.18)
-dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2005, 2008-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/config/longlong.m4 b/config/longlong.m4
new file mode 100644 (file)
index 0000000..eefb37c
--- /dev/null
@@ -0,0 +1,113 @@
+# longlong.m4 serial 17
+dnl Copyright (C) 1999-2007, 2009-2014 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG_INT if 'long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'long long int' exists but is only 32 bits large
+# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
+# defined. In this case you can treat 'long long int' like 'long int'.
+
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+     [ac_cv_type_long_long_int=yes
+      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+        if test $ac_cv_type_long_long_int = yes; then
+          dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+          dnl If cross compiling, assume the bug is not important, since
+          dnl nobody cross compiles for this platform as far as we know.
+          AC_RUN_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[@%:@include <limits.h>
+                 @%:@ifndef LLONG_MAX
+                 @%:@ define HALF \
+                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                 @%:@ define LLONG_MAX (HALF - 1 + HALF)
+                 @%:@endif]],
+               [[long long int n = 1;
+                 int i;
+                 for (i = 0; ; i++)
+                   {
+                     long long int m = n << i;
+                     if (m >> i != n)
+                       return 1;
+                     if (LLONG_MAX / 2 < m)
+                       break;
+                   }
+                 return 0;]])],
+            [],
+            [ac_cv_type_long_long_int=no],
+            [:])
+        fi
+      fi])
+  if test $ac_cv_type_long_long_int = yes; then
+    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type 'long long int'.])
+  fi
+])
+
+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'unsigned long long int' exists but is only 32 bits
+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
+# will not be defined. In this case you can treat 'unsigned long long int'
+# like 'unsigned long int'.
+
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for unsigned long long int],
+    [ac_cv_type_unsigned_long_long_int],
+    [ac_cv_type_unsigned_long_long_int=yes
+     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+       AC_LINK_IFELSE(
+         [_AC_TYPE_LONG_LONG_SNIPPET],
+         [],
+         [ac_cv_type_unsigned_long_long_int=no])
+     fi])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type 'unsigned long long int'.])
+  fi
+])
+
+# Expands to a C program that can be used to test for simultaneous support
+# of 'long long' and 'unsigned long long'. We don't want to say that
+# 'long long' is available if 'unsigned long long' is not, or vice versa,
+# because too many programs rely on the symmetry between signed and unsigned
+# integer types (excluding 'bool').
+AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
+[
+  AC_LANG_PROGRAM(
+    [[/* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;]],
+    [[/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));]])
+])
index b3719cf..9e2c0c9 100755 (executable)
@@ -1,9 +1,9 @@
 #!/bin/sh
 # Get modification time of a file or directory and pretty-print it.
 
-scriptversion=2010-08-21.06; # UTC
+scriptversion=2015-04-09.19; # UTC
 
-# Copyright (C) 1995-2013 Free Software Foundation, Inc.
+# Copyright (C) 1995-2014 Free Software Foundation, Inc.
 # written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
 #
 # This program is free software; you can redistribute it and/or modify
@@ -74,6 +74,10 @@ export LC_ALL
 LC_TIME=C
 export LC_TIME
 
+# Use UTC to get reproducible result
+TZ=UTC
+export TZ
+
 # GNU ls changes its time format in response to the TIME_STYLE
 # variable.  Since we cannot assume 'unset' works, revert this
 # variable to its documented default.
index db98974..f62bbae 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2013-10-28.13; # UTC
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
index 003704c..53cdc8b 100644 (file)
@@ -1,5 +1,5 @@
 # nls.m4 serial 5 (gettext-0.18)
-dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation,
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014 Free Software Foundation,
 dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
index 47f36a4..43012dc 100644 (file)
@@ -1,5 +1,5 @@
-# po.m4 serial 17 (gettext-0.18)
-dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
+# po.m4 serial 24 (gettext-0.19)
+dnl Copyright (C) 1995-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -17,19 +17,20 @@ dnl Authors:
 dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
 dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
 
-AC_PREREQ([2.50])
+AC_PREREQ([2.60])
 
 dnl Checks for all prerequisites of the po subdirectory.
 AC_DEFUN([AM_PO_SUBDIRS],
 [
   AC_REQUIRE([AC_PROG_MAKE_SET])dnl
   AC_REQUIRE([AC_PROG_INSTALL])dnl
-  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+  AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+  AC_REQUIRE([AC_PROG_SED])dnl
   AC_REQUIRE([AM_NLS])dnl
 
   dnl Release version of the gettext macros. This is used to ensure that
   dnl the gettext macros and po/Makefile.in.in are in sync.
-  AC_SUBST([GETTEXT_MACRO_VERSION], [0.18])
+  AC_SUBST([GETTEXT_MACRO_VERSION], [0.19])
 
   dnl Perform the following tests also if --disable-nls has been given,
   dnl because they are needed for "make dist" to work.
@@ -102,7 +103,7 @@ changequote([,])dnl
       case "$ac_file" in */Makefile.in)
         # Adjust a relative srcdir.
         ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
-        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
         ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
         # In autoconf-2.13 it is called $ac_given_srcdir.
         # In autoconf-2.50 it is called $srcdir.
@@ -118,7 +119,8 @@ changequote([,])dnl
         if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
           rm -f "$ac_dir/POTFILES"
           test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
-          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[  ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          gt_tab=`printf '\t'`
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
           POMAKEFILEDEPS="POTFILES.in"
           # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
           # on $ac_dir but don't depend on user-specified configuration
@@ -129,12 +131,12 @@ changequote([,])dnl
               test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
             fi
             ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
-            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            # Hide the ALL_LINGUAS assignment from automake < 1.5.
             eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
             POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
           else
             # The set of available languages was given in configure.in.
-            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            # Hide the ALL_LINGUAS assignment from automake < 1.5.
             eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
           fi
           # Compute POFILES
@@ -226,7 +228,7 @@ AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
 changequote(,)dnl
   # Adjust a relative srcdir.
   ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
-  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+  ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
   ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
   # In autoconf-2.13 it is called $ac_given_srcdir.
   # In autoconf-2.50 it is called $srcdir.
@@ -254,6 +256,7 @@ EOT
   fi
 
   # A sed script that extracts the value of VARIABLE from a Makefile.
+  tab=`printf '\t'`
   sed_x_variable='
 # Test if the hold space is empty.
 x
@@ -261,9 +264,9 @@ s/P/P/
 x
 ta
 # Yes it was empty. Look if we have the expected variable definition.
-/^[     ]*VARIABLE[     ]*=/{
+/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{
   # Seen the first line of the variable definition.
-  s/^[  ]*VARIABLE[     ]*=//
+  s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=//
   ba
 }
 bd
@@ -315,7 +318,7 @@ changequote([,])dnl
     sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
     ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
   fi
-  # Hide the ALL_LINGUAS assigment from automake < 1.5.
+  # Hide the ALL_LINGUAS assignment from automake < 1.5.
   eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
   # Compute POFILES
   # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
@@ -405,14 +408,15 @@ changequote([,])dnl
   fi
 
   sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+  tab=`printf '\t'`
   if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
     # Add dependencies that cannot be formulated as a simple suffix rule.
     for lang in $ALL_LINGUAS; do
       frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
       cat >> "$ac_file.tmp" <<EOF
 $frobbedlang.msg: $lang.po
-       @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
-       \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
 EOF
     done
   fi
@@ -422,8 +426,8 @@ EOF
       frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
       cat >> "$ac_file.tmp" <<EOF
 $frobbedlang/\$(DOMAIN).resources.dll: $lang.po
-       @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
-       \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
 EOF
     done
   fi
index 2d804ac..b499f79 100644 (file)
@@ -1,5 +1,5 @@
-# progtest.m4 serial 6 (gettext-0.18)
-dnl Copyright (C) 1996-2003, 2005, 2008-2010 Free Software Foundation, Inc.
+# progtest.m4 serial 7 (gettext-0.18.2)
+dnl Copyright (C) 1996-2003, 2005, 2008-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -27,15 +27,14 @@ AC_DEFUN([AM_PATH_PROG_WITH_TEST],
 # Prepare PATH_SEPARATOR.
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
 
 # Find out how to test for executable files. Don't use a zero-byte file,
index 6312dad..314063c 100644 (file)
@@ -3,11 +3,12 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2014-05-20.16}
+\def\texinfoversion{2016-05-07.20}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016
+% Free Software Foundation, Inc.
 %
 % This texinfo.tex file is free software: you can redistribute it and/or
 % modify it under the terms of the GNU General Public License as
 \everyjob{\message{[Texinfo version \texinfoversion]}%
   \catcode`+=\active \catcode`\_=\active}
 
+% LaTeX's \typeout.  This ensures that the messages it is used for
+% are identical in format to the corresponding ones from latex/pdflatex.
+\def\typeout{\immediate\write17}%
+
 \chardef\other=12
 
 % We never want plain's \outer definition of \+ in Texinfo.
 \let\ptexraggedright=\raggedright
 \let\ptexrbrace=\}
 \let\ptexslash=\/
+\let\ptexsp=\sp
 \let\ptexstar=\*
+\let\ptexsup=\sup
 \let\ptext=\t
 \let\ptextop=\top
 {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
 \ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
 \ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
 
-% Since the category of space is not known, we have to be careful.
-\chardef\spacecat = 10
-\def\spaceisspace{\catcode`\ =\spacecat}
+% Give the space character the catcode for a space.
+\def\spaceisspace{\catcode`\ =10\relax}
 
-% sometimes characters are active, so we need control sequences.
-\chardef\ampChar   = `\&
-\chardef\colonChar = `\:
-\chardef\commaChar = `\,
 \chardef\dashChar  = `\-
-\chardef\dotChar   = `\.
-\chardef\exclamChar= `\!
-\chardef\hashChar  = `\#
-\chardef\lquoteChar= `\`
-\chardef\questChar = `\?
-\chardef\rquoteChar= `\'
-\chardef\semiChar  = `\;
 \chardef\slashChar = `\/
 \chardef\underChar = `\_
 
   wide-spread wrap-around
 }
 
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen\bindingoffset
-\newdimen\normaloffset
-\newdimen\pagewidth \newdimen\pageheight
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt }
-
 % Sometimes it is convenient to have everything in the transcript file
 % and nothing on the terminal.  We don't just call \tracingall here,
 % since that produces some useless output on the terminal.  We also make
 \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
   \removelastskip\penalty-200\bigskip\fi\fi}
 
+%\f Output routine
+%
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt }
+
 % Do @cropmarks to get crop marks.
 %
 \newif\ifcropmarks
 %
 % Another complication is to let the user choose whether \thischapter
 % (\thissection) refers to the chapter (section) in effect at the top
-% of a page, or that at the bottom of a page.  The solution is
-% described on page 260 of The TeXbook.  It involves outputting two
-% marks for the sectioning macros, one before the section break, and
-% one after.  I won't pretend I can describe this better than DEK...
+% of a page, or that at the bottom of a page.
+
+% \domark is called twice inside \chapmacro, to add one
+% mark before the section break, and one after.
+%   In the second call \prevchapterdefs is the same as \lastchapterdefs,
+% and \prevsectiondefs is the same as \lastsectiondefs.
+%   Then if the page is not broken at the mark, some of the previous
+% section appears on the page, and we can get the name of this section
+% from \firstmark for @everyheadingmarks top.
+%   @everyheadingmarks bottom uses \botmark.
+%
+% See page 260 of The TeXbook.
 \def\domark{%
   \toks0=\expandafter{\lastchapterdefs}%
   \toks2=\expandafter{\lastsectiondefs}%
   \toks6=\expandafter{\prevsectiondefs}%
   \toks8=\expandafter{\lastcolordefs}%
   \mark{%
-                   \the\toks0 \the\toks2  % 0: top marks (\last...)
-      \noexpand\or \the\toks4 \the\toks6  % 1: bottom marks (default, \prev...)
+                   \the\toks0 \the\toks2  % 0: marks for @everyheadingmarks top
+      \noexpand\or \the\toks4 \the\toks6  % 1: for @everyheadingmarks bottom
     \noexpand\else \the\toks8             % 2: color marks
   }%
 }
+
+% \gettopheadingmarks, \getbottomheadingmarks,
+% \getcolormarks - extract needed part of mark.
+%
 % \topmark doesn't work for the very first chapter (after the title
 % page or the contents), so we use \firstmark there -- this gets us
 % the mark with the chapter defs, unless the user sneaks in, e.g.,
 % Avoid "undefined control sequence" errors.
 \def\lastchapterdefs{}
 \def\lastsectiondefs{}
+\def\lastsection{}
 \def\prevchapterdefs{}
 \def\prevsectiondefs{}
 \def\lastcolordefs{}
 
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\txipagewidth \newdimen\txipageheight
+
 % Main output routine.
+%
 \chardef\PAGE = 255
 \output = {\onepageout{\pagecontents\PAGE}}
 
 \newbox\headlinebox
 \newbox\footlinebox
 
-% \onepageout takes a vbox as an argument.  Note that \pagecontents
-% does insertions, but you have to call it yourself.
+% \onepageout takes a vbox as an argument.
+% \shipout a vbox for a single page, adding an optional header, footer,
+% cropmarks, and footnote.  This also causes index entries for this page
+% to be written to the auxiliary files.
+%
 \def\onepageout#1{%
   \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
   %
   \ifodd\pageno  \advance\hoffset by \bindingoffset
   \else \advance\hoffset by -\bindingoffset\fi
   %
+  % Common context changes for both heading and footing.
   % Do this outside of the \shipout so @code etc. will be expanded in
   % the headline as they should be, not taken literally (outputting ''code).
-  \def\commmonheadfootline{\let\hsize=\pagewidth \texinfochars}
+  \def\commmonheadfootline{\let\hsize=\txipagewidth \texinfochars}
   %
-  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
-  \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
+  % Retrieve the information for the headings from the marks in the page,
+  % and call Plain TeX's \makeheadline and \makefootline, which use the
+  % values in \headline and \footline.
+  %
+  % This is used to check if we are on the first page of a chapter.
+  \ifcase1\topmark\fi
+  \let\prevchaptername\thischaptername
+  \ifcase0\firstmark\fi
+  \let\curchaptername\thischaptername
   %
+  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
   \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+  %
+  \ifx\curchaptername\prevchaptername
+    \let\thischapterheading\thischapter
+  \else
+    % \thischapterheading is the same as \thischapter except it is blank
+    % for the first page of a chapter.  This is to prevent the chapter name 
+    % being shown twice.
+    \def\thischapterheading{}%
+  \fi
+  %
+  \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
   \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}%
   %
   {%
+    % Set context for writing to auxiliary files like index files.
     % Have to do this stuff outside the \shipout because we want it to
     % take effect in \write's, yet the group defined by the \vbox ends
     % before the \shipout runs.
     \normalturnoffactive  % \ in index entries must not stay \, e.g., if
                % the page break happens to be in the middle of an example.
                % We don't want .vr (or whatever) entries like this:
-               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
+               % \entry{{\indexbackslash }acronym}{32}{\code {\acronym}}
                % "\acronym" won't work when it's read back in;
                % it needs to be
-               % {\code {{\tt \backslashcurfont }acronym}
+               % {\code {{\backslashcurfont }acronym}
     \shipout\vbox{%
       % Do this early so pdf references go to the beginning of the page.
       \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
 
 \newinsert\margin \dimen\margin=\maxdimen
 
-\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+% Main part of page, including any footnotes
+\def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}}
 {\catcode`\@ =11
 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
 % marginal hacks, juha@viisa.uucp (Juha Takala)
 \def\nsbot{\vbox
   {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
 
+
+% Argument parsing
+
 % Parse an argument, then pass it to #1.  The argument is the rest of
 % the input line (except we remove a trailing comment).  #1 should be a
 % macro which expects an ordinary undelimited TeX argument.
+% For example, \def\foo{\parsearg\fooxxx}.
 %
 \def\parsearg{\parseargusing{}}
 \def\parseargusing#1#2{%
   }%
 }
 
-% First remove any @comment, then any @c comment.
+% First remove any @comment, then any @c comment.  Also remove a @texinfoc
+% comment (see \scanmacro for details).  Pass the result on to \argcheckspaces.
 \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
-\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argremovetexinfoc #1\texinfoc\ArgTerm}
+\def\argremovetexinfoc#1\texinfoc#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
 
 % Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
 %
 %
 \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
 
+
+% \parseargdef - define a command taking an argument on the line
+%
 % \parseargdef\foo{...}
 %      is roughly equivalent to
 % \def\foo{\parsearg\Xfoo}
 % \def\Xfoo#1{...}
-%
-% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
-% favourite TeX trick.  --kasal, 16nov03
-
 \def\parseargdef#1{%
   \expandafter \doparseargdef \csname\string#1\endcsname #1%
 }
     \endgraf % Not \par, as it may have been set to \lisppar.
     \global\dimen1 = \prevdepth
   \egroup           % End the \vtop.
+  \addgroupbox
+  \prevdepth = \dimen1
+  \checkinserts
+}
+
+\def\addgroupbox{
   % \dimen0 is the vertical size of the group's box.
   \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
   % \dimen2 is how much space is left on the page (more or less).
-  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
+  \dimen2 = \txipageheight   \advance\dimen2 by -\pagetotal
   % if the group doesn't fit on the current page, and it's a big big
   % group, force a page break.
   \ifdim \dimen0 > \dimen2
-    \ifdim \pagetotal < \vfilllimit\pageheight
+    \ifdim \pagetotal < \vfilllimit\txipageheight
       \page
     \fi
   \fi
   \box\groupbox
-  \prevdepth = \dimen1
-  \checkinserts
 }
+
 %
 % TeX puts in an \escapechar (i.e., `@') at the beginning of the help
 % message, so this ends up printing `@group can only ...'.
@@ -934,12 +981,20 @@ where each line of input produces a line of output.}
 % @c is the same as @comment
 % @ignore ... @end ignore  is another way to write a comment
 %
-\def\comment{\begingroup \catcode`\^^M=\other%
+\def\comment{\begingroup \catcode`\^^M=\active%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other\commentxxx}%
+
+{\catcode`\^^M=\active%
+\gdef\commentxxx#1^^M{\endgroup%
+\futurelet\nexttoken\commentxxxx}%
+\gdef\commentxxxx{\ifx\nexttoken\aftermacro\expandafter\comment\fi}%
+}
+
+\def\c{\begingroup \catcode`\^^M=\active%
 \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
-\commentxxx}
-{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-%
-\let\c=\comment
+\cxxx}
+{\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}}
+% See comment in \scanmacro about why the definitions of @c and @comment differ
 
 % @paragraphindent NCHARS
 % We'll use ems for NCHARS, close enough.
@@ -1010,69 +1065,23 @@ where each line of input produces a line of output.}
 % paragraph.
 %
 \gdef\dosuppressfirstparagraphindent{%
-  \gdef\indent{%
-    \restorefirstparagraphindent
-    \indent
-  }%
-  \gdef\noindent{%
-    \restorefirstparagraphindent
-    \noindent
-  }%
-  \global\everypar = {%
-    \kern -\parindent
-    \restorefirstparagraphindent
-  }%
+  \gdef\indent  {\restorefirstparagraphindent \indent}%
+  \gdef\noindent{\restorefirstparagraphindent \noindent}%
+  \global\everypar = {\kern -\parindent \restorefirstparagraphindent}%
 }
-
+%
 \gdef\restorefirstparagraphindent{%
-  \global \let \indent = \ptexindent
-  \global \let \noindent = \ptexnoindent
-  \global \everypar = {}%
+  \global\let\indent = \ptexindent
+  \global\let\noindent = \ptexnoindent
+  \global\everypar = {}%
 }
 
 
 % @refill is a no-op.
 \let\refill=\relax
 
-% If working on a large document in chapters, it is convenient to
-% be able to disable indexing, cross-referencing, and contents, for test runs.
-% This is done with @novalidate (before @setfilename).
-%
-\newif\iflinks \linkstrue % by default we want the aux files.
-\let\novalidate = \linksfalse
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
-   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-   \iflinks
-     \tryauxfile
-     % Open the new aux file.  TeX will close it automatically at exit.
-     \immediate\openout\auxfile=\jobname.aux
-   \fi % \openindices needs to do some work in any case.
-   \openindices
-   \let\setfilename=\comment % Ignore extra @setfilename cmds.
-   %
-   % If texinfo.cnf is present on the system, read it.
-   % Useful for site-wide @afourpaper, etc.
-   \openin 1 texinfo.cnf
-   \ifeof 1 \else \input texinfo.cnf \fi
-   \closein 1
-   %
-   \comment % Ignore the actual filename.
-}
-
-% Called from \setfilename.
-%
-\def\openindices{%
-  \newindex{cp}%
-  \newcodeindex{fn}%
-  \newcodeindex{vr}%
-  \newcodeindex{tp}%
-  \newcodeindex{ky}%
-  \newcodeindex{pg}%
-}
+% @setfilename INFO-FILENAME - ignored
+\let\setfilename=\comment
 
 % @bye.
 \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
@@ -1090,10 +1099,69 @@ where each line of input produces a line of output.}
 \newtoks\toksC
 \newtoks\toksD
 \newbox\boxA
+\newbox\boxB
 \newcount\countA
 \newif\ifpdf
 \newif\ifpdfmakepagedest
 
+%
+% For LuaTeX
+%
+
+\ifx\luatexversion\thisisundefined
+\else
+  % Escape PDF strings UTF-8 to UTF-16
+  \begingroup
+    \catcode`\%=12
+    \directlua{
+      function UTF16oct(str)
+        tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377')
+        for c in string.utfvalues(str) do
+          if c < 0x10000 then
+            tex.sprint(
+              string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
+                            string.char(0x5c) .. string.char(0x25) .. '03o',
+                            (c / 256), (c % 256)))
+          else
+            c = c - 0x10000
+            local c_hi = c / 1024 + 0xd800
+            local c_lo = c % 1024 + 0xdc00
+            tex.sprint(
+              string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
+                            string.char(0x5c) .. string.char(0x25) .. '03o' ..
+                            string.char(0x5c) .. string.char(0x25) .. '03o' ..
+                            string.char(0x5c) .. string.char(0x25) .. '03o',
+                            (c_hi / 256), (c_hi % 256),
+                            (c_lo / 256), (c_lo % 256)))
+          end
+        end
+      end
+    }
+  \endgroup
+  \def\pdfescapestring#1{\directlua{UTF16oct('\luaescapestring{#1}')}}
+  \ifnum\luatexversion>84
+    % For LuaTeX >= 0.85
+    \def\pdfdest{\pdfextension dest}
+    \let\pdfoutput\outputmode
+    \def\pdfliteral{\pdfextension literal}
+    \def\pdfcatalog{\pdfextension catalog}
+    \def\pdftexversion{\numexpr\pdffeedback version\relax}
+    \let\pdfximage\saveimageresource
+    \let\pdfrefximage\useimageresource
+    \let\pdflastximage\lastsavedimageresourceindex
+    \def\pdfendlink{\pdfextension endlink\relax}
+    \def\pdfoutline{\pdfextension outline}
+    \def\pdfstartlink{\pdfextension startlink}
+    \def\pdffontattr{\pdfextension fontattr}
+    \def\pdfobj{\pdfextension obj}
+    \def\pdflastobj{\numexpr\pdffeedback lastobj\relax}
+    \let\pdfpagewidth\pagewidth
+    \let\pdfpageheight\pageheight
+    \edef\pdfhorigin{\pdfvariable horigin}
+    \edef\pdfvorigin{\pdfvariable vorigin}
+  \fi
+\fi
+
 % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
 % can be set).  So we test for \relax and 0 as well as being undefined.
 \ifx\pdfoutput\thisisundefined
@@ -1147,8 +1215,8 @@ output) for that.)}
   \def\rgbDarkRed{0.50 0.09 0.12}
   \def\rgbBlack{0 0 0}
   %
-  % k sets the color for filling (usual text, etc.);
-  % K sets the color for stroking (thin rules, e.g., normal _'s).
+  % rg sets the color for filling (usual text, etc.);
+  % RG sets the color for stroking (thin rules, e.g., normal _'s).
   \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
   %
   % Set color, and create a mark which defines \thiscolor accordingly,
@@ -1277,18 +1345,23 @@ output) for that.)}
     % page number.  We could generate a destination for the section
     % text in the case where a section has no node, but it doesn't
     % seem worth the trouble, since most documents are normally structured.
-    \edef\pdfoutlinedest{#3}%
-    \ifx\pdfoutlinedest\empty
-      \def\pdfoutlinedest{#4}%
-    \else
-      \txiescapepdf\pdfoutlinedest
-    \fi
-    %
-    % Also escape PDF chars in the display string.
-    \edef\pdfoutlinetext{#1}%
-    \txiescapepdf\pdfoutlinetext
-    %
-    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+    {
+      \ifx\luatexversion\thisisundefined \else
+        \turnoffactive % LuaTeX can use Unicode strings for PDF
+      \fi
+      \edef\pdfoutlinedest{#3}%
+      \ifx\pdfoutlinedest\empty
+        \def\pdfoutlinedest{#4}%
+      \else
+        \txiescapepdf\pdfoutlinedest
+      \fi
+      %
+      % Also escape PDF chars in the display string.
+      \edef\pdfoutlinetext{#1}%
+      \txiescapepdf\pdfoutlinetext
+      %
+      \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+    }
   }
   %
   \def\pdfmakeoutlines{%
@@ -1443,6 +1516,232 @@ output) for that.)}
   \let\pdfmakeoutlines = \relax
 \fi  % \ifx\pdfoutput
 
+%
+% For XeTeX
+%
+\newif\iftxiuseunicodedestname
+\ifx\XeTeXrevision\thisisundefined
+\else
+  %
+  % XeTeX version check
+  %
+  \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99995}>-1
+    % XeTeX 0.99995+ contains xdvipdfmx 20160307+.
+    % It can handle Unicode destination name for PDF.
+    \txiuseunicodedestnametrue
+  \else
+    % XeTeX < 0.99995 can not handle Unicode destination name for PDF
+    % because xdvipdfmx 20150315 has UTF-16 convert issue.
+    % It fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+    \txiuseunicodedestnamefalse
+  \fi
+  %
+  % PDF outline support
+  %
+  % Emulate the primitive of pdfTeX
+  \def\pdfdest name#1 xyz{%
+    \special{pdf:dest (name#1) [@thispage /XYZ @xpos @ypos]}%
+  }
+  \def\pdfmkdest#1{{%
+    % We have to set dummies so commands such as @code, and characters
+    % such as \, aren't expanded when present in a section title.
+    \indexnofonts
+    \iftxiuseunicodedestname
+      \def\pdfdestname{#1}% Pass through Unicode characters.
+    \else
+      \edef\pdfdestname{#1}% Replace Unicode characters to ASCII.
+    \fi
+    \turnoffactive
+    \makevalueexpandable
+    \txiescapepdf\pdfdestname
+    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+  }}
+  %
+  \def\dopdfoutline#1#2#3#4{%
+    \iftxiuseunicodedestname
+      \def\pdfoutlinedest{#3}% Pass through Unicode characters.
+    \else
+      \edef\pdfoutlinedest{#3}% Replace Unicode characters to ASCII.
+    \fi
+    \ifx\pdfoutlinedest\empty
+      \def\pdfoutlinedest{#4}%
+    \fi
+    {
+      \turnoffactive
+      \txiescapepdf\pdfoutlinedest
+      \edef\pdfoutlinetext{#1}%
+      \txiescapepdf\pdfoutlinetext
+      %
+      \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A
+        << /S /GoTo /D (name\pdfoutlinedest) >> >> }%
+    }
+  }
+  %
+  \def\pdfmakeoutlines{%
+    \begingroup
+      %
+      % In the case of XeTeX, counts of subentries is not necesary.
+      % Therefore, read toc only once.
+      %
+      % We use the node names as the destinations.
+      \def\partentry##1##2##3##4{}% ignore parts in the outlines
+      \def\numchapentry##1##2##3##4{%
+        \dopdfoutline{##1}{1}{##3}{##4}}%
+      \def\numsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{2}{##3}{##4}}%
+      \def\numsubsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{3}{##3}{##4}}%
+      \def\numsubsubsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{4}{##3}{##4}}%
+      %
+      \let\appentry\numchapentry%
+      \let\appsecentry\numsecentry%
+      \let\appsubsecentry\numsubsecentry%
+      \let\appsubsubsecentry\numsubsubsecentry%
+      \let\unnchapentry\numchapentry%
+      \let\unnsecentry\numsecentry%
+      \let\unnsubsecentry\numsubsecentry%
+      \let\unnsubsubsecentry\numsubsubsecentry%
+      %
+      % In the case of XeTeX, xdvipdfmx converts strings to UTF-16.
+      % Therefore, the encoding and the language may not be considered.
+      %
+      \indexnofonts
+      \setupdatafile
+      % We can have normal brace characters in the PDF outlines, unlike
+      % Texinfo index files.  So set that up.
+      \def\{{\lbracecharliteral}%
+      \def\}{\rbracecharliteral}%
+      \catcode`\\=\active \otherbackslash
+      \input \tocreadfilename
+    \endgroup
+  }
+  {\catcode`[=1 \catcode`]=2
+   \catcode`{=\other \catcode`}=\other
+   \gdef\lbracecharliteral[{]%
+   \gdef\rbracecharliteral[}]%
+  ]
+
+  \special{pdf:docview << /PageMode /UseOutlines >> }
+  % ``\special{pdf:tounicode ...}'' is not necessary
+  % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it.
+  % However, due to UTF-16 convert issue of xdvipdfmx 20150315,
+  % ``\special{pdf:dest ...}'' can not handle non-ASCII strings.
+  % It fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+%
+  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+    \ifx\PP\D\let\nextsp\relax
+    \else\let\nextsp\skipspaces
+      \addtokens{\filename}{\PP}%
+      \advance\filenamelength by 1
+    \fi
+    \nextsp}
+  \def\getfilename#1{%
+    \filenamelength=0
+    % If we don't expand the argument now, \skipspaces will get
+    % snagged on things like "@value{foo}".
+    \edef\temp{#1}%
+    \expandafter\skipspaces\temp|\relax
+  }
+  % make a live url in pdf output.
+  \def\pdfurl#1{%
+    \begingroup
+      % it seems we really need yet another set of dummies; have not
+      % tried to figure out what each command should do in the context
+      % of @url.  for now, just make @/ a no-op, that's the only one
+      % people have actually reported a problem with.
+      %
+      \normalturnoffactive
+      \def\@{@}%
+      \let\/=\empty
+      \makevalueexpandable
+      % do we want to go so far as to use \indexnofonts instead of just
+      % special-casing \var here?
+      \def\var##1{##1}%
+      %
+      \leavevmode\setcolor{\urlcolor}%
+      \special{pdf:bann << /Border [0 0 0]
+        /Subtype /Link /A << /S /URI /URI (#1) >> >>}%
+    \endgroup}
+  \def\endlink{\setcolor{\maincolor}\special{pdf:eann}}
+  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+  \def\maketoks{%
+    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+    \ifx\first0\adn0
+    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+    \else
+      \ifnum0=\countA\else\makelink\fi
+      \ifx\first.\let\next=\done\else
+        \let\next=\maketoks
+        \addtokens{\toksB}{\the\toksD}
+        \ifx\first,\addtokens{\toksB}{\space}\fi
+      \fi
+    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+    \next}
+  \def\makelink{\addtokens{\toksB}%
+    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+  \def\pdflink#1{%
+    \special{pdf:bann << /Border [0 0 0]
+      /Type /Annot /Subtype /Link /A << /S /GoTo /D (name#1) >> >>}%
+    \setcolor{\linkcolor}#1\endlink}
+  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+%
+  %
+  % @image support
+  %
+  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+  \def\doxeteximage#1#2#3{%
+    \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+    \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+    %
+    % XeTeX (and the PDF format) support .pdf, .png, .jpg (among
+    % others).  Let's try in that order, PDF first since if
+    % someone has a scalable image, presumably better to use that than a
+    % bitmap.
+    \let\xeteximgext=\empty
+    \begingroup
+      \openin 1 #1.pdf \ifeof 1
+        \openin 1 #1.PDF \ifeof 1
+          \openin 1 #1.png \ifeof 1
+            \openin 1 #1.jpg \ifeof 1
+              \openin 1 #1.jpeg \ifeof 1
+                \openin 1 #1.JPG \ifeof 1
+                  \errmessage{Could not find image file #1 for XeTeX}%
+                \else \gdef\xeteximgext{JPG}%
+                \fi
+              \else \gdef\xeteximgext{jpeg}%
+              \fi
+            \else \gdef\xeteximgext{jpg}%
+            \fi
+          \else \gdef\xeteximgext{png}%
+          \fi
+        \else \gdef\xeteximgext{PDF}%
+        \fi
+      \else \gdef\xeteximgext{pdf}%
+      \fi
+      \closein 1
+    \endgroup
+    %
+    \def\xetexpdfext{pdf}%
+    \ifx\xeteximgext\xetexpdfext
+      \XeTeXpdffile "#1".\xeteximgext ""
+    \else
+      \def\xetexpdfext{PDF}%
+      \ifx\xeteximgext\xetexpdfext
+        \XeTeXpdffile "#1".\xeteximgext ""
+      \else
+        \XeTeXpicfile "#1".\xeteximgext ""
+      \fi
+    \fi
+    \ifdim \wd0 >0pt width \xeteximagewidth \fi
+    \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
+  }
+\fi
 
 \message{fonts,}
 
@@ -1826,8 +2125,10 @@ end
 % A few fonts for @defun names and args.
 \setfont\defbf\bfshape{10}{\magstep1}{OT1}
 \setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defsl\slshape{10}{\magstep1}{OT1TT}
 \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf
+\let\tenttsl=\defttsl \let\tensl=\defsl \bf}
 
 % Fonts for indices, footnotes, small examples (9pt).
 \def\smallnominalsize{9pt}
@@ -1888,6 +2189,7 @@ end
 % Section fonts (14.4pt).
 \def\secnominalsize{14pt}
 \setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1}
 \setfont\secit\itbshape{10}{\magstep2}{OT1IT}
 \setfont\secsl\slbshape{10}{\magstep2}{OT1}
 \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
@@ -1957,8 +2259,10 @@ end
 % A few fonts for @defun names and args.
 \setfont\defbf\bfshape{10}{\magstephalf}{OT1}
 \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defsl\slshape{10}{\magstephalf}{OT1TT}
 \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf
+\let\tensl=\defsl \let\tenttsl=\defttsl \bf}
 
 % Fonts for indices, footnotes, small examples (9pt).
 \def\smallnominalsize{9pt}
@@ -2090,12 +2394,9 @@ end
  \endgroup
 }
 
-
 % In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families.  Since
-% texinfo doesn't allow for producing subscripts and superscripts except
-% in the main text, we don't bother to reset \scriptfont and
-% \scriptscriptfont (which would also require loading a lot more fonts).
+% we have to define the \textfont of the standard families.  We don't
+% bother to reset \scriptfont and \scriptscriptfont; awaiting user need.
 %
 \def\resetmathfonts{%
   \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
@@ -2109,8 +2410,8 @@ end
 % \tenSTYLE to set the current font.
 %
 % Each font-changing command also sets the names \lsize (one size lower)
-% and \lllsize (three sizes lower).  These relative commands are used in
-% the LaTeX logo and acronyms.
+% and \lllsize (three sizes lower).  These relative commands are used
+% in, e.g., the LaTeX logo and acronyms.
 %
 % This all needs generalizing, badly.
 %
@@ -2432,8 +2733,8 @@ end
 %
 \catcode`@=11
   \def\plainfrenchspacing{%
-    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
-    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+    \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m
+    \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m
     \def\endofsentencespacefactor{1000}% for @. and friends
   }
   \def\plainnonfrenchspacing{%
@@ -2601,6 +2902,7 @@ end
     \setbox0 = \hbox{\ignorespaces #2}% look for second arg
     \ifdim\wd0 > 0pt
       \ifpdf
+        % For pdfTeX and LuaTeX
         \ifurefurlonlylink
           % PDF plus option to not display url, show just arg
           \unhbox0             
@@ -2610,7 +2912,19 @@ end
           \unhbox0\ (\urefcode{#1})%
         \fi
       \else
-        \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
+        \ifx\XeTeXrevision\thisisundefined
+          \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
+        \else
+          % For XeTeX
+          \ifurefurlonlylink
+            % PDF plus option to not display url, show just arg
+            \unhbox0             
+          \else
+            % PDF, normally display both arg and url for consistency,
+            % visibility, if the pdf is eventually used to print, etc.
+            \unhbox0\ (\urefcode{#1})%
+          \fi
+        \fi
       \fi
     \else
       \urefcode{#1}% only url given, so show it
@@ -2621,9 +2935,9 @@ end
 
 % Allow line breaks around only a few characters (only).
 \def\urefcatcodes{%
-  \catcode\ampChar=\active   \catcode\dotChar=\active
-  \catcode\hashChar=\active  \catcode\questChar=\active
-  \catcode\slashChar=\active
+  \catcode`\&=\active \catcode`\.=\active
+  \catcode`\#=\active \catcode`\?=\active
+  \catcode`\/=\active
 }
 {
   \urefcatcodes
@@ -2711,7 +3025,18 @@ end
     \endlink
   \endgroup}
 \else
-  \let\email=\uref
+  \ifx\XeTeXrevision\thisisundefined
+    \let\email=\uref
+  \else
+    \def\email#1{\doemail#1,,\finish}
+    \def\doemail#1,#2,#3\finish{\begingroup
+      \unsepspaces
+      \pdfurl{mailto:#1}%
+      \setbox0 = \hbox{\ignorespaces #2}%
+      \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+      \endlink
+    \endgroup}
+  \fi
 \fi
 
 % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
@@ -2780,11 +3105,6 @@ end
 %
 \def\dmn#1{\thinspace #1}
 
-% @l was never documented to mean ``switch to the Lisp font'',
-% and it is not used as such in any manual I can find.  We need it for
-% Polish suppressed-l.  --karl, 22sep96.
-%\def\l#1{{\li #1}\null}
-
 % @acronym for "FBI", "NATO", and the like.
 % We print this one point size smaller, since it's intended for
 % all-uppercase.
@@ -2837,21 +3157,24 @@ end
 \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
 %
 \def\math{%
-  \tex
-  \mathunderscore
-  \let\\ = \mathbackslash
-  \mathactive
-  % make the texinfo accent commands work in math mode
-  \let\"=\ddot
-  \let\'=\acute
-  \let\==\bar
-  \let\^=\hat
-  \let\`=\grave
-  \let\u=\breve
-  \let\v=\check
-  \let\~=\tilde
-  \let\dotaccent=\dot
-  $\finishmath
+  \ifmmode\else % only go into math if not in math mode already
+    \tex
+    \mathunderscore
+    \let\\ = \mathbackslash
+    \mathactive
+    % make the texinfo accent commands work in math mode
+    \let\"=\ddot
+    \let\'=\acute
+    \let\==\bar
+    \let\^=\hat
+    \let\`=\grave
+    \let\u=\breve
+    \let\v=\check
+    \let\~=\tilde
+    \let\dotaccent=\dot
+    % have to provide another name for sup operator
+    \let\mathopsup=\sup
+  $\expandafter\finishmath\fi
 }
 \def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
 
@@ -2874,8 +3197,17 @@ end
   }
 }
 
-% ctrl is no longer a Texinfo command, but leave this definition for fun.
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+% for @sub and @sup, if in math mode, just do a normal sub/superscript.
+% If in text, use math to place as sub/superscript, but switch
+% into text mode, with smaller fonts.  This is a different font than the
+% one used for real math sub/superscripts (8pt vs. 7pt), but let's not
+% fix it (significant additions to font machinery) until someone notices.
+%
+\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi}
+\def\finishsub#1{$\sb{\hbox{\selectfonts\lllsize #1}}$}%
+%
+\def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
+\def\finishsup#1{$\ptexsp{\hbox{\selectfonts\lllsize #1}}$}%
 
 % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
 % Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
@@ -2941,8 +3273,8 @@ end
 % @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
 % Unless we're in typewriter, use \ecfont because the CM text fonts do
 % not have braces, and we don't want to switch into math.
-\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}}
-\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}}
+\def\mylbrace{{\ifmonospace\char123\else\ensuremath\lbrace\fi}}
+\def\myrbrace{{\ifmonospace\char125\else\ensuremath\rbrace\fi}}
 \let\{=\mylbrace \let\lbracechar=\{
 \let\}=\myrbrace \let\rbracechar=\}
 \begingroup
@@ -3017,11 +3349,16 @@ end
   \TeX
 }
 
-% Some math mode symbols.
-\def\bullet{$\ptexbullet$}
-\def\geq{\ifmmode \ge\else $\ge$\fi}
-\def\leq{\ifmmode \le\else $\le$\fi}
-\def\minus{\ifmmode -\else $-$\fi}
+% Some math mode symbols.  Define \ensuremath to switch into math mode
+% unless we are already there.  Expansion tricks may not be needed here,
+% but safer, and can't hurt.
+\def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi}
+\def\ensuredmath#1{$\relax#1$}
+%
+\def\bullet{\ensuremath\ptexbullet}
+\def\geq{\ensuremath\ge}
+\def\leq{\ensuremath\le}
+\def\minus{\ensuremath-}
 
 % @dots{} outputs an ellipsis using the current font.
 % We do .5em per period so that it has the same spacing in the cm
@@ -3185,8 +3522,15 @@ end
 \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
 \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
 %
-% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
-\def\ecfont{%
+% Use the European Computer Modern fonts (cm-super in outline format)
+% for non-CM glyphs.  That is ec* for regular text and tc* for the text
+% companion symbols (LaTeX TS1 encoding).  Both are part of the ec
+% package and follow the same conventions.
+% 
+\def\ecfont{\etcfont{e}}
+\def\tcfont{\etcfont{t}}
+%
+\def\etcfont#1{%
   % We can't distinguish serif/sans and italic/slanted, but this
   % is used for crude hacks anyway (like adding French and German
   % quotes to documents typeset with CM, where we lose kerning), so
@@ -3195,14 +3539,14 @@ end
   \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
   \ifmonospace
     % typewriter:
-    \font\thisecfont = ectt\ecsize \space at \nominalsize
+    \font\thisecfont = #1ctt\ecsize \space at \nominalsize
   \else
     \ifx\curfontstyle\bfstylename
       % bold:
-      \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
+      \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize
     \else
       % regular:
-      \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+      \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize
     \fi
   \fi
   \thisecfont
@@ -3246,13 +3590,16 @@ end
 \newif\ifseenauthor
 \newif\iffinishedtitlepage
 
-% Do an implicit @contents or @shortcontents after @end titlepage if the
-% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
-%
-\newif\ifsetcontentsaftertitlepage
- \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
-\newif\ifsetshortcontentsaftertitlepage
- \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+% @setcontentsaftertitlepage used to do an implicit @contents or
+% @shortcontents after @end titlepage, but it is now obsolete.
+\def\setcontentsaftertitlepage{%
+  \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo
+              command; move your @contents command if you want the contents
+              after the title page.}}%
+\def\setshortcontentsaftertitlepage{%
+  \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo
+              command; move your @shortcontents and @contents commands if you 
+              want the contents after the title page.}}%
 
 \parseargdef\shorttitlepage{%
   \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
@@ -3294,20 +3641,6 @@ end
   % Need this before the \...aftertitlepage checks so that if they are
   % in effect the toc pages will come out with page numbers.
   \HEADINGSon
-  %
-  % If they want short, they certainly want long too.
-  \ifsetshortcontentsaftertitlepage
-    \shortcontents
-    \contents
-    \global\let\shortcontents = \relax
-    \global\let\contents = \relax
-  \fi
-  %
-  \ifsetcontentsaftertitlepage
-    \contents
-    \global\let\contents = \relax
-    \global\let\shortcontents = \relax
-  \fi
 }
 
 \def\finishtitlepage{%
@@ -3372,7 +3705,7 @@ end
 \newtoks\evenfootline    % footline on even pages
 \newtoks\oddfootline     % footline on odd pages
 
-% Now make TeX use those variables
+% Now make \makeheadline and \makefootline in Plain TeX use those variables
 \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
                             \else \the\evenheadline \fi}}
 \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
@@ -3411,7 +3744,7 @@ end
   %
   % Leave some space for the footline.  Hopefully ok to assume
   % @evenfooting will not be used by itself.
-  \global\advance\pageheight by -12pt
+  \global\advance\txipageheight by -12pt
   \global\advance\vsize by -12pt
 }
 
@@ -3428,13 +3761,17 @@ end
 % @everyheadingmarks
 % @everyfootingmarks
 
+% These define \getoddheadingmarks, \getevenheadingmarks,
+% \getoddfootingmarks, and \getevenfootingmarks, each to one of
+% \gettopheadingmarks, \getbottomheadingmarks.
+%
 \def\evenheadingmarks{\headingmarks{even}{heading}}
 \def\oddheadingmarks{\headingmarks{odd}{heading}}
 \def\evenfootingmarks{\headingmarks{even}{footing}}
 \def\oddfootingmarks{\headingmarks{odd}{footing}}
-\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
+\parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1}
                           \headingmarks{odd}{heading}{#1} }
-\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
+\parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1}
                           \headingmarks{odd}{footing}{#1} }
 % #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
 \def\headingmarks#1#2#3 {%
@@ -3455,7 +3792,7 @@ end
 % By default, they are off at the start of a document,
 % and turned `on' after @end titlepage.
 
-\def\headings #1 {\csname HEADINGS#1\endcsname}
+\parseargdef\headings{\csname HEADINGS#1\endcsname}
 
 \def\headingsoff{% non-global headings elimination
   \evenheadline={\hfil}\evenfootline={\hfil}%
@@ -3475,7 +3812,7 @@ end
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
 \global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chapoddpage
 }
 \let\contentsalignmacro = \chappager
@@ -3486,8 +3823,8 @@ end
 \global\pageno=1
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenheadline={\line{\thischapterheading\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chappager
 }
 \def\HEADINGSon{\HEADINGSdouble}
@@ -3498,7 +3835,7 @@ end
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
 \global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chapoddpage
 }
 
@@ -3506,8 +3843,8 @@ end
 \def\HEADINGSsinglex{%
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenheadline={\line{\thischapterheading\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chappager
 }
 
@@ -3717,7 +4054,12 @@ end
    \noindent
    \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
    %
-   \vadjust{\penalty 1200}}% not good to break after first line of item.
+   \ifinner\else
+     \vadjust{\penalty 1200}% not good to break after first line of item.
+   \fi
+   % We can be in inner vertical mode in a footnote, although an
+   % @itemize looks awful there.
+  }%
   \flushcr
 }
 
@@ -4339,19 +4681,16 @@ end
 % except not \outer, so it can be used within macros and \if's.
 \edef\newwrite{\makecsname{ptexnewwrite}}
 
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that accumulates this index.  The file's extension is foo.
+% \newindex {foo} defines an index named IX.
+% It automatically defines \IXindex such that
+% \IXindex ...rest of line... puts an entry in the index IX.
+% It also defines \IXindfile to be the number of the output channel for
+% the file that accumulates this index.  The file's extension is IX.
 % The name of an index should be no more than 2 characters long
 % for the sake of vms.
 %
 \def\newindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-  \fi
+  \expandafter\chardef\csname#1indfile\endcsname=0
   \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
     \noexpand\doindex{#1}}
 }
@@ -4365,14 +4704,19 @@ end
 \def\defcodeindex{\parsearg\newcodeindex}
 %
 \def\newcodeindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1
-  \fi
+  \expandafter\chardef\csname#1indfile\endcsname=0
   \expandafter\xdef\csname#1index\endcsname{%
     \noexpand\docodeindex{#1}}%
 }
 
+% The default indices:
+\newindex{cp}%      concepts,
+\newcodeindex{fn}%  functions,
+\newcodeindex{vr}%  variables,
+\newcodeindex{tp}%  types,
+\newcodeindex{ky}%  keys
+\newcodeindex{pg}%  and programs.
+
 
 % @synindex foo bar    makes index foo feed into index bar.
 % Do this instead of @defindex foo if you don't want it as a separate index.
@@ -4401,26 +4745,19 @@ end
   \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
 }
 
-% Define \doindex, the driver for all \fooindex macros.
+% Define \doindex, the driver for all index macros.
 % Argument #1 is generated by the calling \fooindex macro,
-%  and it is "foo", the name of the index.
-
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
+% and it the two-letter name of the index.
 
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
+\def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx}
+\def\doindexxxx #1{\doind{\indexname}{#1}}
 
 % like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
+\def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}}
 
-% Take care of Texinfo commands that can appear in an index entry.
-% Since there are some commands we want to expand, and others we don't,
-% we have to laboriously prevent expansion for those that we don't.
+% Used when writing an index entry out to an index file to prevent
+% expansion of Texinfo commands that can appear in an index entry.
 %
 \def\indexdummies{%
   \escapechar = `\\     % use backslash in output files.
@@ -4436,31 +4773,6 @@ end
   \def\{{{\tt\char123}}%
   \def\}{{\tt\char125}}%
   %
-  % I don't entirely understand this, but when an index entry is
-  % generated from a macro call, the \endinput which \scanmacro inserts
-  % causes processing to be prematurely terminated.  This is,
-  % apparently, because \indexsorttmp is fully expanded, and \endinput
-  % is an expandable command.  The redefinition below makes \endinput
-  % disappear altogether for that purpose -- although logging shows that
-  % processing continues to some further point.  On the other hand, it
-  % seems \endinput does not hurt in the printed index arg, since that
-  % is still getting written without apparent harm.
-  %
-  % Sample source (mac-idx3.tex, reported by Graham Percival to
-  % help-texinfo, 22may06):
-  % @macro funindex {WORD}
-  % @findex xyz
-  % @end macro
-  % ...
-  % @funindex commtest
-  % This is not enough to reproduce the bug, but it gives the flavor.
-  %
-  % Sample whatsit resulting:
-  % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
-  %
-  % So:
-  \let\endinput = \empty
-  %
   % Do the redefinitions.
   \commondummies
 }
@@ -4484,7 +4796,6 @@ end
 % Called from \indexdummies and \atdummies.
 %
 \def\commondummies{%
-  %
   % \definedummyword defines \#1 as \string\#1\space, thus effectively
   % preventing its expansion.  This is used only for control words,
   % not control letters, because the \space would be incorrect for
@@ -4561,6 +4872,7 @@ end
   \definedummyword\guilsinglright
   \definedummyword\lbracechar
   \definedummyword\leq
+  \definedummyword\mathopsup
   \definedummyword\minus
   \definedummyword\ogonek
   \definedummyword\pounds
@@ -4574,19 +4886,20 @@ end
   \definedummyword\quotesinglbase
   \definedummyword\rbracechar
   \definedummyword\result
+  \definedummyword\sub
+  \definedummyword\sup
   \definedummyword\textdegree
   %
   % We want to disable all macros so that they are not expanded by \write.
   \macrolist
+  \definedummyword\value
   %
   \normalturnoffactive
-  %
-  % Handle some cases of @value -- where it does not contain any
-  % (non-fully-expandable) commands.
-  \makevalueexpandable
 }
 
 % \commondummiesnofonts: common to \commondummies and \indexnofonts.
+% Define \definedumyletter, \definedummyaccent and \definedummyword before
+% using.
 %
 \def\commondummiesnofonts{%
   % Control letters and accents.
@@ -4648,27 +4961,61 @@ end
   \definedummyword\samp
   \definedummyword\strong
   \definedummyword\tie
+  \definedummyword\U
   \definedummyword\uref
   \definedummyword\url
   \definedummyword\var
   \definedummyword\verb
   \definedummyword\w
   \definedummyword\xref
-  %
-  % Consider:
-  %   @macro mkind{arg1,arg2}
-  %   @cindex \arg2\
-  %   @end macro
-  %   @mkind{foo, bar}
-  % The space after the comma will end up in the temporary definition
-  % that we make for arg2 (see \parsemargdef ff.).  We want all this to be
-  % expanded for the sake of the index, so we end up just seeing "bar".
-  \let\xeatspaces = \eatspaces
 }
 
 % For testing: output @{ and @} in index sort strings as \{ and \}.
 \newif\ifusebracesinindexes
 
+\let\indexlbrace\relax
+\let\indexrbrace\relax
+
+{\catcode`\@=0
+\catcode`\\=13
+  @gdef@backslashdisappear{@def\{}}
+}
+
+{
+\catcode`\<=13
+\catcode`\-=13
+\catcode`\`=13
+  \gdef\indexnonalnumdisappear{%
+    \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else
+      % @set txiindexlquoteignore makes us ignore left quotes in the sort term.
+      % (Introduced for FSFS 2nd ed.)
+      \let`=\empty
+    \fi
+    %
+    \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else
+      \backslashdisappear
+    \fi
+    %
+    \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else
+      \def-{}%
+    \fi
+    \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else
+      \def<{}%
+    \fi
+    \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else
+      \def\@{}%
+    \fi
+  }
+
+  \gdef\indexnonalnumreappear{%
+    \useindexbackslash
+    \let-\normaldash
+    \let<\normalless
+    \def\@{@}%
+  }
+}
+
+
 % \indexnofonts is used when outputting the strings to sort the index
 % by, and when constructing control sequence names.  It eliminates all
 % control sequences and just writes whatever the best ASCII sort string
@@ -4681,7 +5028,6 @@ end
   \def\definedummyletter##1{\let##1\empty}%
   % All control words become @asis by default; overrides below.
   \let\definedummyword\definedummyaccent
-  %
   \commondummiesnofonts
   %
   % Don't no-op \tt, since it isn't a user-level command
@@ -4694,19 +5040,10 @@ end
   \def\_{\normalunderscore}%
   \def\-{}% @- shouldn't affect sorting
   %
-  % Unfortunately, texindex is not prepared to handle braces in the
-  % content at all.  So for index sorting, we map @{ and @} to strings
-  % starting with |, since that ASCII character is between ASCII { and }.
-  \ifusebracesinindexes
-    \def\lbracechar{\lbracecmd}%
-    \def\rbracechar{\rbracecmd}%
-  \else
-    \def\lbracechar{|a}%
-    \def\rbracechar{|b}%
-  \fi
-  \let\{=\lbracechar
-  \let\}=\rbracechar
-  %
+  \uccode`\1=`\{ \uppercase{\def\{{1}}%
+  \uccode`\1=`\} \uppercase{\def\}{1}}%
+  \let\lbracechar\{%
+  \let\rbracechar\}%
   %
   % Non-English letters.
   \def\AA{AA}%
@@ -4715,7 +5052,7 @@ end
   \def\L{L}%
   \def\OE{OE}%
   \def\O{O}%
-  \def\TH{ZZZ}%
+  \def\TH{TH}%
   \def\aa{aa}%
   \def\ae{ae}%
   \def\dh{dzz}%
@@ -4727,7 +5064,7 @@ end
   \def\o{o}%
   \def\questiondown{?}%
   \def\ss{ss}%
-  \def\th{zzz}%
+  \def\th{th}%
   %
   \def\LaTeX{LaTeX}%
   \def\TeX{TeX}%
@@ -4764,9 +5101,6 @@ end
   \def\result{=>}%
   \def\textdegree{o}%
   %
-  \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax
-  \else \indexlquoteignore \fi
-  %
   % We need to get rid of all macros, leaving only the arguments (if present).
   % Of course this is not nearly correct, but it is the best we can do for now.
   % makeinfo does not expand macros in the argument to @deffn, which ends up
@@ -4780,19 +5114,18 @@ end
   \macrolist
 }
 
-% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us
-% ignore left quotes in the sort term.
-{\catcode`\`=\active
- \gdef\indexlquoteignore{\let`=\empty}}
 
-\let\indexbackslash=0  %overridden during \printindex.
 \let\SETmarginindex=\relax % put index entries in margin (undocumented)?
 
 % Most index entries go through here, but \dosubind is the general case.
 % #1 is the index name, #2 is the entry text.
 \def\doind#1#2{\dosubind{#1}{#2}{}}
 
-% Workhorse for all \fooindexes.
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+% TODO: Two-level index?  Operation index?
+
+% Workhorse for all indexes.
 % #1 is name of index, #2 is stuff to put there, #3 is subentry --
 % empty if called from \doind, as we usually are (the main exception
 % is with most defuns, which call us directly).
@@ -4800,6 +5133,7 @@ end
 \def\dosubind#1#2#3{%
   \iflinks
   {%
+    \requireopenindexfile{#1}%
     % Store the main index entry text (including the third arg).
     \toks0 = {#2}%
     % If third arg is present, precede it with a space.
@@ -4815,7 +5149,50 @@ end
   \fi
 }
 
-% Write the entry in \toks0 to the index file:
+% Check if an index file has been opened, and if not, open it.
+\def\requireopenindexfile#1{%
+\ifnum\csname #1indfile\endcsname=0
+  \expandafter\newwrite \csname#1indfile\endcsname
+  \edef\suffix{#1}%
+  % A .fls suffix would conflict with the file extension for the output
+  % of -recorder, so use .f1s instead.
+  \ifx\suffix\indexisfl\def\suffix{f1}\fi
+  % Open the file
+  \immediate\openout\csname#1indfile\endcsname \jobname.\suffix
+  % Using \immediate above here prevents an object entering into the current 
+  % box, which could confound checks such as those in \safewhatsit for
+  % preceding skips.
+  \typeout{Writing index file \jobname.\suffix}%
+\fi}
+\def\indexisfl{fl}
+
+% Output \ as {\indexbackslash}, because \ is an escape character in
+% the index files.
+\let\indexbackslash=\relax
+{\catcode`\@=0 \catcode`\\=\active
+  @gdef@useindexbackslash{@def\{{@indexbackslash}}}
+}
+
+% Definition for writing index entry text.
+\def\sortas#1{\ignorespaces}%
+
+% Definition for writing index entry sort key.  Should occur at the at
+% the beginning of the index entry, like
+%     @cindex @sortas{september} \september
+% The \ignorespaces takes care of following space, but there's no way
+% to remove space before it.
+{
+\catcode`\-=13
+\gdef\indexwritesortas{%
+  \begingroup
+  \indexnonalnumreappear
+  \indexwritesortasxxx}
+\gdef\indexwritesortasxxx#1{%
+  \xdef\indexsortkey{#1}\endgroup}
+}
+
+
+% Write the entry in \toks0 to the index file.
 %
 \def\dosubindwrite{%
   % Put the index entry in the margin if desired.
@@ -4825,14 +5202,26 @@ end
   %
   % Remember, we are within a group.
   \indexdummies % Must do this here, since \bf, etc expand at this stage
-  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
-      % so it will be output as is; and it will print as backslash.
+  \useindexbackslash % \indexbackslash isn't defined now so it will be output 
+                     % as is; and it will print as backslash.
+  % The braces around \indexbrace are recognized by texindex.
   %
-  % Process the index entry with all font commands turned off, to
-  % get the string to sort by.
+  % Get the string to sort by, by processing the index entry with all
+  % font commands turned off.
   {\indexnofonts
-   \edef\temp{\the\toks0}% need full expansion
-   \xdef\indexsorttmp{\temp}%
+   \def\lbracechar{{\indexlbrace}}%
+   \def\rbracechar{{\indexrbrace}}%
+   \let\{=\lbracechar
+   \let\}=\rbracechar
+   \indexnonalnumdisappear
+   \xdef\indexsortkey{}%
+   \let\sortas=\indexwritesortas
+   \edef\temp{\the\toks0}%
+   \setbox\dummybox = \hbox{\temp}% Make sure to execute any \sortas
+   \ifx\indexsortkey\empty
+     \xdef\indexsortkey{\temp}%
+     \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi
+   \fi
   }%
   %
   % Set up the complete index entry, with both the sort key and
@@ -4842,10 +5231,11 @@ end
   % sorted result.
   \edef\temp{%
     \write\writeto{%
-      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+      \string\entry{\indexsortkey}{\noexpand\folio}{\the\toks0}}%
   }%
   \temp
 }
+\newbox\dummybox % used above
 
 % Take care of unwanted page breaks/skips around a whatsit:
 %
@@ -4971,51 +5361,106 @@ end
   % as its first line, TeX doesn't complain about mismatched braces
   % (because it thinks @} is a control sequence).
   \catcode`\@ = 11
-  \openin 1 \jobname.#1s
+  % See comment in \requireopenindexfile.
+  \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi
+  \openin 1 \jobname.\indexname s
   \ifeof 1
     % \enddoublecolumns gets confused if there is no text in the index,
     % and it loses the chapter title and the aux file entries for the
     % index.  The easiest way to prevent this problem is to make sure
     % there is some text.
     \putwordIndexNonexistent
+    \typeout{No file \jobname.\indexname s.}%
   \else
+    \catcode`\\ = 0
     %
     % If the index file exists but is empty, then \openin leaves \ifeof
     % false.  We have to make TeX try to read something from the file, so
     % it can discover if there is anything in it.
-    \read 1 to \temp
+    \read 1 to \thisline
     \ifeof 1
       \putwordIndexIsEmpty
     \else
       % Index files are almost Texinfo source, but we use \ as the escape
       % character.  It would be better to use @, but that's too big a change
       % to make right now.
-      \def\indexbackslash{\backslashcurfont}%
-      \catcode`\\ = 0
-      \escapechar = `\\
+      \def\indexbackslash{\ttbackslash}%
+      \let\indexlbrace\{   % Likewise, set these sequences for braces
+      \let\indexrbrace\}   % used in the sort key.
       \begindoublecolumns
-      \input \jobname.#1s
+      \let\entryorphanpenalty=\indexorphanpenalty
+      %
+      % Read input from the index file line by line.
+      \loopdo
+        \ifeof1
+          \let\firsttoken\relax
+        \else
+          \read 1 to \nextline
+          \edef\act{\gdef\noexpand\firsttoken{\getfirsttoken\nextline}}%
+          \act
+        \fi
+        \thisline
+        %
+        \ifeof1\else
+        \let\thisline\nextline
+      \repeat
+      %%
       \enddoublecolumns
     \fi
   \fi
   \closein 1
 \endgroup}
 
+\def\getfirsttoken#1{\expandafter\getfirsttokenx#1\endfirsttoken}
+\long\def\getfirsttokenx#1#2\endfirsttoken{\noexpand#1}
+
+\def\loopdo#1\repeat{\def\body{#1}\loopdoxxx}
+\def\loopdoxxx{\let\next=\relax\body\let\next=\loopdoxxx\fi\next}
+
 % These macros are used by the sorted index file itself.
 % Change them to control the appearance of the index.
 
-\def\initial#1{{%
-  % Some minor font changes for the special characters.
-  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-  %
+{\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13
+\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13
+\catcode`\$=3
+\gdef\initialglyphs{%
+  % Some changes for non-alphabetic characters.  Using the glyphs from the
+  % math fonts looks more consistent than the typewriter font used elsewhere
+  % for these characters.
+  \def\indexbackslash{\math{\backslash}}%
+  \let\\=\indexbackslash
+  %
+  % Can't get bold backslash so don't use bold forward slash
+  \catcode`\/=13
+  \def/{{\secrmnotbold \normalslash}}%
+  \def-{{\normaldash\normaldash}}% en dash `--'
+  \def^{{\chapbf \normalcaret}}%
+  \def~{{\chapbf \normaltilde}}%
+  \def\_{%
+     \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }%
+  \def|{$\vert$}%
+  \def<{$\less$}%
+  \def>{$\gtr$}%
+  \def+{$\normalplus$}%
+}}
+
+\def\initial{%
+  \bgroup
+  \initialglyphs
+  \initialx
+}
+
+\def\initialx#1{%
   % Remove any glue we may have, we'll be inserting our own.
   \removelastskip
   %
   % We like breaks before the index initials, so insert a bonus.
+  % The glue before the bonus allows a little bit of space at the
+  % bottom of a column to reduce an increase in inter-line spacing.
   \nobreak
-  \vskip 0pt plus 3\baselineskip
-  \penalty 0
-  \vskip 0pt plus -3\baselineskip
+  \vskip 0pt plus 5\baselineskip
+  \penalty -300 
+  \vskip 0pt plus -5\baselineskip
   %
   % Typeset the initial.  Making this add up to a whole number of
   % baselineskips increases the chance of the dots lining up from column
@@ -5023,24 +5468,24 @@ end
   % we need before each entry, but it's better.
   %
   % No shrink because it confuses \balancecolumns.
-  \vskip 1.67\baselineskip plus .5\baselineskip
-  \leftline{\secbf #1}%
+  \vskip 1.67\baselineskip plus 1\baselineskip
+  \leftline{\secfonts \kern-0.05em \secbf #1}%
+  % \secfonts is inside the argument of \leftline so that the change of
+  % \baselineskip will not affect any glue inserted before the vbox that
+  % \leftline creates.
   % Do our best not to break after the initial.
   \nobreak
   \vskip .33\baselineskip plus .1\baselineskip
-}}
+  \egroup % \initialglyphs
+}
+
+\newdimen\entryrightmargin
+\entryrightmargin=0pt
 
 % \entry typesets a paragraph consisting of the text (#1), dot leaders, and
 % then page number (#2) flushed to the right margin.  It is used for index
 % and table of contents entries.  The paragraph is indented by \leftskip.
 %
-% A straightforward implementation would start like this:
-%      \def\entry#1#2{...
-% But this freezes the catcodes in the argument, and can cause problems to
-% @code, which sets - active.  This problem was fixed by a kludge---
-% ``-'' was active throughout whole index, but this isn't really right.
-% The right solution is to prevent \entry from swallowing the whole text.
-%                                 --kasal, 21nov03
 \def\entry{%
   \begingroup
     %
@@ -5048,38 +5493,18 @@ end
     % affect previous text.
     \par
     %
-    % Do not fill out the last line with white space.
-    \parfillskip = 0in
-    %
     % No extra space above this paragraph.
     \parskip = 0in
     %
-    % Do not prefer a separate line ending with a hyphen to fewer lines.
-    \finalhyphendemerits = 0
-    %
-    % \hangindent is only relevant when the entry text and page number
-    % don't both fit on one line.  In that case, bob suggests starting the
-    % dots pretty far over on the line.  Unfortunately, a large
-    % indentation looks wrong when the entry text itself is broken across
-    % lines.  So we use a small indentation and put up with long leaders.
-    %
-    % \hangafter is reset to 1 (which is the value we want) at the start
-    % of each paragraph, so we need not do anything with that.
-    \hangindent = 2em
-    %
-    % When the entry text needs to be broken, just fill out the first line
-    % with blank space.
-    \rightskip = 0pt plus1fil
-    %
-    % A bit of stretch before each entry for the benefit of balancing
-    % columns.
-    \vskip 0pt plus1pt
-    %
     % When reading the text of entry, convert explicit line breaks
     % from @* into spaces.  The user might give these in long section
     % titles, for instance.
     \def\*{\unskip\space\ignorespaces}%
-    \def\entrybreak{\hfil\break}%
+    \def\entrybreak{\hfil\break}% An undocumented command
+    %
+    % A bit of stretch before each entry for the benefit of balancing
+    % columns.
+    \vskip 0pt plus0.5pt
     %
     % Swallow the left brace of the text (first parameter):
     \afterassignment\doentry
@@ -5087,45 +5512,169 @@ end
 }
 \def\entrybreak{\unskip\space\ignorespaces}%
 \def\doentry{%
+    % Save the text of the entry
+    \global\setbox\boxA=\hbox\bgroup
     \bgroup % Instead of the swallowed brace.
       \noindent
       \aftergroup\finishentry
       % And now comes the text of the entry.
+      % Not absorbing as a macro argument reduces the chance of problems
+      % with catcodes occurring.
 }
-\def\finishentry#1{%
+{\catcode`\@=11
+\gdef\finishentry#1{%
+    \egroup % end box A
+    \dimen@ = \wd\boxA % Length of text of entry
+    \global\setbox\boxA=\hbox\bgroup\unhbox\boxA
     % #1 is the page number.
     %
-    % The following is kludged to not output a line of dots in the index if
-    % there are no page numbers.  The next person who breaks this will be
-    % cursed by a Unix daemon.
-    \setbox\boxA = \hbox{#1}%
-    \ifdim\wd\boxA = 0pt
-      \ %
+    % Get the width of the page numbers, and only use
+    % leaders if they are present.
+    \global\setbox\boxB = \hbox{#1}%
+    \ifdim\wd\boxB = 0pt
+      \null\nobreak\hfill\ %
     \else
       %
-      % If we must, put the page number on a line of its own, and fill out
-      % this line with blank space.  (The \hfil is overwhelmed with the
-      % fill leaders glue in \indexdotfill if the page number does fit.)
-      \hfil\penalty50
       \null\nobreak\indexdotfill % Have leaders before the page number.
       %
-      % The `\ ' here is removed by the implicit \unskip that TeX does as
-      % part of (the primitive) \par.  Without it, a spurious underfull
-      % \hbox ensues.
       \ifpdf
-       \pdfgettoks#1.%
-       \ \the\toksA
+        \pdfgettoks#1.%
+        \bgroup\let\domark\relax
+          \hskip\skip\thinshrinkable\the\toksA
+        \egroup
+        % The redefinion of \domark stops marks being added in \pdflink to 
+        % preserve coloured links across page boundaries.  Otherwise the marks
+        % would get in the way of \lastbox in \insertindexentrybox.
       \else
-       \ #1%
+        \ifx\XeTeXrevision\thisisundefined
+          \hskip\skip\thinshrinkable #1%
+        \else
+          \pdfgettoks#1.%
+          \bgroup\let\domark\relax
+            \hskip\skip\thinshrinkable\the\toksA
+          \egroup
+        \fi
       \fi
     \fi
-    \par
+    \egroup % end \boxA
+    \ifdim\wd\boxB = 0pt
+      \global\setbox\entryindexbox=\vbox{\unhbox\boxA}%
+    \else
+    \global\setbox\entryindexbox=\vbox\bgroup
+      \prevdepth=\entrylinedepth
+      \noindent
+      % We want the text of the entries to be aligned to the left, and the
+      % page numbers to be aligned to the right.
+      %
+      \advance\leftskip by 0pt plus 1fil
+      \advance\leftskip by 0pt plus -1fill
+      \rightskip = 0pt plus -1fil
+      \advance\rightskip by 0pt plus 1fill
+      % Cause last line, which could consist of page numbers on their own
+      % if the list of page numbers is long, to be aligned to the right.
+      \parfillskip=0pt plus -1fill
+      %
+      \hangindent=1em
+      %
+      \advance\rightskip by \entryrightmargin
+      % Determine how far we can stretch into the margin.
+      % This allows, e.g., "Appendix H  GNU Free Documentation License" to
+      % fit on one line in @letterpaper format.
+      \ifdim\entryrightmargin>2.1em
+        \dimen@i=2.1em
+      \else
+        \dimen@i=0em
+      \fi
+      \advance \parfillskip by 0pt minus 1\dimen@i
+      %
+      \dimen@ii = \hsize
+      \advance\dimen@ii by -1\leftskip
+      \advance\dimen@ii by -1\entryrightmargin
+      \advance\dimen@ii by 1\dimen@i
+      \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
+      \ifdim\dimen@ > 0.8\dimen@ii   % due to long index text
+        \dimen@ = 0.7\dimen@ % Try to split the text roughly evenly
+        \dimen@ii = \hsize
+        \advance \dimen@ii by -1em
+        \ifnum\dimen@>\dimen@ii
+          % If the entry is too long, use the whole line
+          \dimen@ = \dimen@ii
+        \fi
+        \advance\leftskip by 0pt plus 1fill % ragged right
+        \advance \dimen@ by 1\rightskip
+        \parshape = 2 0pt \dimen@ 1em \dimen@ii
+        % Ideally we'd add a finite glue at the end of the first line only, but
+        % TeX doesn't seem to provide a way to do such a thing.
+      \fi\fi
+      \unhbox\boxA
+      %
+      % Do not prefer a separate line ending with a hyphen to fewer lines.
+      \finalhyphendemerits = 0
+      %
+      % Word spacing - no stretch
+      \spaceskip=\fontdimen2\font minus \fontdimen4\font
+      %
+      \linepenalty=1000  % Discourage line breaks.
+      \hyphenpenalty=5000  % Discourage hyphenation.
+      %
+      \par % format the paragraph
+    \egroup % The \vbox
+    \fi
   \endgroup
+  % delay text of entry until after penalty
+  \bgroup\aftergroup\insertindexentrybox
+  \entryorphanpenalty
+}}
+
+\newskip\thinshrinkable
+\skip\thinshrinkable=.15em minus .15em
+
+\newbox\entryindexbox
+\def\insertindexentrybox{%
+  \copy\entryindexbox
+  % The following gets the depth of the last box.  This is for even
+  % line spacing when entries span several lines.
+  \setbox\dummybox\vbox{%
+    \unvbox\entryindexbox
+    \nointerlineskip
+    \lastbox
+    \global\entrylinedepth=\prevdepth
+  }%
+  % Note that we couldn't simply \unvbox\entryindexbox followed by 
+  % \nointerlineskip\lastbox to remove the last box and then reinstate it, 
+  % because this resets how far the box has been \moveleft'ed to 0.  \unvbox
+  % doesn't affect \prevdepth either.
+}
+\newdimen\entrylinedepth
+
+% Default is no penalty
+\let\entryorphanpenalty\egroup
+
+% Used from \printindex.  \firsttoken should be the first token
+% after the \entry.  If it's not another \entry, we are at the last
+% line of a group of index entries, so insert a penalty to discourage
+% orphaned index entries.
+\long\def\indexorphanpenalty{%
+  \def\isentry{\entry}%
+  \ifx\firsttoken\isentry
+  \else
+    \unskip\penalty 9000
+    % The \unskip here stops breaking before the glue.  It relies on the
+    % \vskip above being there, otherwise there is an error
+    % "You can't use `\unskip' in vertical mode".  There has to be glue
+    % in the current vertical list that hasn't been added to the
+    % "current page".  See Chapter 24 of the TeXbook.  This contradicts
+    % Section 8.3.7 in "TeX by Topic," though.
+  \fi
+  \egroup % now comes the box added with \aftergroup
 }
 
 % Like plain.tex's \dotfill, except uses up at least 1 em.
+% The filll stretch here overpowers both the fil and fill stretch to push
+% the page number to the right.
 \def\indexdotfill{\cleaders
-  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
+  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll}
+
 
 \def\primary #1{\line{#1\hfil}}
 
@@ -5139,7 +5688,11 @@ end
   \ifpdf
     \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
   \else
-    #2
+    \ifx\XeTeXrevision\thisisundefined
+      #2
+    \else
+      \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+    \fi
   \fi
   \par
 }}
@@ -5147,12 +5700,39 @@ end
 % Define two-column mode, which we use to typeset indexes.
 % Adapted from the TeXbook, page 416, which is to say,
 % the manmac.tex format used to print the TeXbook itself.
-\catcode`\@=11
+\catcode`\@=11  % private names
 
 \newbox\partialpage
 \newdimen\doublecolumnhsize
+\newdimen\doublecolumntopgap
+\doublecolumntopgap = 0pt
+
+% Use inside an output routine to save \topmark and \firstmark
+\def\savemarks{%
+  \global\savedtopmark=\expandafter{\topmark }%
+  \global\savedfirstmark=\expandafter{\firstmark }%
+}
+\newtoks\savedtopmark
+\newtoks\savedfirstmark
+
+% Set \topmark and \firstmark for next time \output runs.
+% Can't be run from withinside \output (because any material
+% added while an output routine is active, including 
+% penalties, is saved for after it finishes).  The page so far
+% should be empty, otherwise what's on it will be thrown away.
+\def\restoremarks{%
+  \mark{\the\savedtopmark}%
+  \bgroup\output = {%
+    \setbox\dummybox=\box\PAGE
+  }abc\eject\egroup
+  % "abc" because output routine doesn't fire for a completely empty page.
+  \mark{\the\savedfirstmark}%
+}
 
 \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+  % If not much space left on page, start a new page.
+  \ifdim\pagetotal>0.8\vsize\vfill\eject\fi
+  %
   % Grab any single-column material above us.
   \output = {%
     %
@@ -5172,8 +5752,15 @@ end
       \unvbox\PAGE
       \kern-\topskip \kern\baselineskip
     }%
+    \savemarks
   }%
   \eject % run that output routine to set \partialpage
+  \restoremarks
+  %
+  % We recover the two marks that the last output routine saved in order
+  % to propagate the information in marks added around a chapter heading,
+  % which could be otherwise be lost by the time the final page is output.
+  %
   %
   % Use the double-column output routine for subsequent pages.
   \output = {\doublecolumnout}%
@@ -5201,13 +5788,19 @@ end
   %
   % Double the \vsize as well.  (We don't need a separate register here,
   % since nobody clobbers \vsize.)
+  \global\doublecolumntopgap = \topskip
+  \global\advance\doublecolumntopgap by -1\baselineskip
+  \advance\vsize by -1\doublecolumntopgap
   \vsize = 2\vsize
+  \topskip=0pt
+  \global\entrylinedepth=0pt\relax
 }
 
 % The double-column output routine for all double-column pages except
-% the last.
+% the last, which is done by \balancecolumns.
 %
 \def\doublecolumnout{%
+  %
   \splittopskip=\topskip \splitmaxdepth=\maxdepth
   % Get the available space for the double columns -- the normal
   % (undoubled) page height minus any material left over from the
@@ -5230,10 +5823,13 @@ end
   %
   \hsize = \doublecolumnhsize
   \wd0=\hsize \wd2=\hsize
-  \hbox to\pagewidth{\box0\hfil\box2}%
+  \vbox{%
+    \vskip\doublecolumntopgap
+    \hbox to\txipagewidth{\box0\hfil\box2}}%
 }
-%
-% All done with double columns.
+
+
+% Finished with with double columns.
 \def\enddoublecolumns{%
   % The following penalty ensures that the page builder is exercised
   % _before_ we change the output routine.  This is necessary in the
@@ -5256,7 +5852,7 @@ end
   % goal.  When TeX sees \eject from below which follows the final
   % section, it invokes the new output routine that we've set after
   % \balancecolumns below; \onepageout will try to fit the two columns
-  % and the final section into the vbox of \pageheight (see
+  % and the final section into the vbox of \txipageheight (see
   % \pagebody), causing an overfull box.
   %
   % Note that glue won't work here, because glue does not exercise the
@@ -5264,21 +5860,21 @@ end
   \penalty0
   %
   \output = {%
-    % Split the last of the double-column material.  Leave it on the
-    % current page, no automatic page break.
+    % Split the last of the double-column material.
+    \savemarks
     \balancecolumns
     %
-    % If we end up splitting too much material for the current page,
-    % though, there will be another page break right after this \output
-    % invocation ends.  Having called \balancecolumns once, we do not
+    % Having called \balancecolumns once, we do not
     % want to call it again.  Therefore, reset \output to its normal
-    % definition right away.  (We hope \balancecolumns will never be
-    % called on to balance too much material, but if it is, this makes
-    % the output somewhat more palatable.)
+    % definition right away.
     \global\output = {\onepageout{\pagecontents\PAGE}}%
   }%
   \eject
   \endgroup % started in \begindoublecolumns
+  \restoremarks
+  % Leave the double-column material on the current page, no automatic
+  % page break.
+  \box\balancedcolumns
   %
   % \pagegoal was set to the doubled \vsize above, since we restarted
   % the current page.  We're now back to normal single-column
@@ -5286,31 +5882,52 @@ end
   % \endgroup where \vsize got restored).
   \pagegoal = \vsize
 }
+\newbox\balancedcolumns
+\setbox\balancedcolumns=\vbox{shouldnt see this}%
 %
-% Called at the end of the double column material.
+% Only called for the last of the double column material.  \doublecolumnout 
+% does the others.
 \def\balancecolumns{%
   \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
   \dimen@ = \ht0
   \advance\dimen@ by \topskip
   \advance\dimen@ by-\baselineskip
-  \divide\dimen@ by 2 % target to split to
-  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
-  \splittopskip = \topskip
-  % Loop until we get a decent breakpoint.
-  {%
-    \vbadness = 10000
-    \loop
-      \global\setbox3 = \copy0
-      \global\setbox1 = \vsplit3 to \dimen@
-    \ifdim\ht3>\dimen@
-      \global\advance\dimen@ by 1pt
-    \repeat
-  }%
-  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
-  \setbox0=\vbox to\dimen@{\unvbox1}%
-  \setbox2=\vbox to\dimen@{\unvbox3}%
+  \ifdim\dimen@<14\baselineskip
+    % Don't split a short final column in two.
+    \setbox2=\vbox{}%
+  \else
+    \divide\dimen@ by 2 % target to split to
+    \dimen@ii = \dimen@
+    \splittopskip = \topskip
+    % Loop until the second column is no higher than the first
+    {%
+      \vbadness = 10000
+      \loop
+        \global\setbox3 = \copy0
+        \global\setbox1 = \vsplit3 to \dimen@
+        % Remove glue from bottom of first column to
+        % make sure it is higher than the second.
+        \global\setbox1 = \vbox{\unvbox1\unpenalty\unskip}%
+      \ifdim\ht3>\ht1
+        \global\advance\dimen@ by 1pt
+      \repeat
+    }%
+    \multiply\dimen@ii by 4
+    \divide\dimen@ii by 5
+    \ifdim\ht3<\dimen@ii
+      % Column heights are too different, so don't make their bottoms
+      % flush with each other.  The glue at the end of the second column
+      % allows a second column to stretch, reducing the difference in
+      % height between the two.
+      \setbox0=\vbox to\dimen@{\unvbox1\vfill}%
+      \setbox2=\vbox to\dimen@{\unvbox3\vskip 0pt plus 0.3\ht0}%
+    \else
+      \setbox0=\vbox to\dimen@{\unvbox1}%
+      \setbox2=\vbox to\dimen@{\unvbox3}%
+    \fi
+  \fi
   %
-  \pagesofar
+  \global\setbox\balancedcolumns=\vbox{\pagesofar}%
 }
 \catcode`\@ = \other
 
@@ -5329,6 +5946,10 @@ end
     \let\lastnode=\empty      % no node to associate with
     \writetocentry{part}{#1}{}% but put it in the toc
     \headingsoff              % no headline or footline on the part page
+    % This outputs a mark at the end of the page that clears \thischapter
+    % and \thissection, as is done in \startcontents.
+    \let\pchapsepmacro\relax
+    \chapmacro{}{Yomitfromtoc}{}%
     \chapoddpage
   \endgroup
 }
@@ -5573,9 +6194,6 @@ end
 
 % @centerchap is like @unnumbered, but the heading is centered.
 \outer\parseargdef\centerchap{%
-  % Well, we could do the following in a group, but that would break
-  % an assumption that \chapmacro is called at the outermost level.
-  % Thus we are safer this way:                --kasal, 24feb04
   \let\centerparametersmaybe = \centerparameters
   \unnmhead0{#1}%
   \let\centerparametersmaybe = \relax
@@ -5699,7 +6317,11 @@ end
 
 % Define plain chapter starts, and page on/off switching for it.
 \def\chapbreak{\dobreak \chapheadingskip {-4000}}
+
+% Start a new page
 \def\chappager{\par\vfill\supereject}
+
+% \chapoddpage - start on an odd page for a new chapter
 % Because \domark is called before \chapoddpage, the filler page will
 % get the headings for the next chapter, which is wrong.  But we don't
 % care -- we just disable all headings on the filler page.
@@ -5714,7 +6336,7 @@ end
   \fi
 }
 
-\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+\parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname}
 
 \def\CHAPPAGoff{%
 \global\let\contentsalignmacro = \chappager
@@ -5735,17 +6357,26 @@ end
 
 \CHAPPAGon
 
-% Chapter opening.
+% \chapmacro - Chapter opening.
 %
 % #1 is the text, #2 is the section type (Ynumbered, Ynothing,
 % Yappendix, Yomitfromtoc), #3 the chapter number.
+% Not used for @heading series.
 %
 % To test against our argument.
 \def\Ynothingkeyword{Ynothing}
-\def\Yomitfromtockeyword{Yomitfromtoc}
 \def\Yappendixkeyword{Yappendix}
+\def\Yomitfromtockeyword{Yomitfromtoc}
 %
 \def\chapmacro#1#2#3{%
+  \expandafter\ifx\thisenv\titlepage\else
+    \checkenv{}% chapters, etc., should not start inside an environment.
+  \fi
+  % FIXME: \chapmacro is currently called from inside \titlepage when
+  % \setcontentsaftertitlepage to print the "Table of Contents" heading, but
+  % this should probably be done by \sectionheading with an option to print
+  % in chapter size.
+  %
   % Insert the first mark before the heading break (see notes for \domark).
   \let\prevchapterdefs=\lastchapterdefs
   \let\prevsectiondefs=\lastsectiondefs
@@ -5798,6 +6429,7 @@ end
   %
   {%
     \chapfonts \rmisbold
+    \let\footnote=\errfootnoteheading % give better error message
     %
     % Have to define \lastsection before calling \donoderef, because the
     % xref code eventually uses it.  On the other hand, it has to be called
@@ -5850,30 +6482,6 @@ end
 }
 
 
-% I don't think this chapter style is supported any more, so I'm not
-% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
-%
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-%
-\def\unnchfopen #1{%
-  \chapoddpage
-  \vbox{\chapfonts \raggedtitlesettings #1\par}%
-  \nobreak\bigskip\nobreak
-}
-\def\chfopen #1#2{\chapoddpage {\chapfonts
-\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
-\par\penalty 5000 %
-}
-\def\centerchfopen #1{%
-  \chapoddpage
-  \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}%
-  \nobreak\bigskip \nobreak
-}
-\def\CHAPFopen{%
-  \global\let\chapmacro=\chfopen
-  \global\let\centerchapmacro=\centerchfopen}
-
-
 % Section titles.  These macros combine the section number parts and
 % call the generic \sectionheading to do the printing.
 %
@@ -5891,22 +6499,29 @@ end
 
 % Print any size, any type, section title.
 %
-% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
-% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
-% section number.
+% #1 is the text of the title,
+% #2 is the section level (sec/subsec/subsubsec),
+% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc),
+% #4 is the section number.
 %
 \def\seckeyword{sec}
 %
 \def\sectionheading#1#2#3#4{%
   {%
-    \checkenv{}% should not be in an environment.
+    \def\sectionlevel{#2}%
+    \def\temptype{#3}%
+    %
+    % It is ok for the @heading series commands to appear inside an
+    % environment (it's been historically allowed, though the logic is
+    % dubious), but not the others.
+    \ifx\temptype\Yomitfromtockeyword\else
+      \checkenv{}% non-@*heading should not be in an environment.
+    \fi
+    \let\footnote=\errfootnoteheading
     %
     % Switch to the right set of fonts.
     \csname #2fonts\endcsname \rmisbold
     %
-    \def\sectionlevel{#2}%
-    \def\temptype{#3}%
-    %
     % Insert first mark before the heading break (see notes for \domark).
     \let\prevsectiondefs=\lastsectiondefs
     \ifx\temptype\Ynothingkeyword
@@ -6069,7 +6684,14 @@ end
   % 1 and 2 (the page numbers aren't printed), and so are the first
   % two pages of the document.  Thus, we'd have two destinations named
   % `1', and two named `2'.
-  \ifpdf \global\pdfmakepagedesttrue \fi
+  \ifpdf
+    \global\pdfmakepagedesttrue
+  \else
+    \ifx\XeTeXrevision\thisisundefined
+    \else
+      \global\pdfmakepagedesttrue
+    \fi
+  \fi
 }
 
 
@@ -6118,7 +6740,7 @@ end
   \savepageno = \pageno
   \begingroup                  % Set up to handle contents files properly.
     \raggedbottom              % Worry more about breakpoints than the bottom.
-    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+    \entryrightmargin=\contentsrightmargin % Don't use the full line length.
     %
     % Roman numerals for page numbers.
     \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
@@ -6223,7 +6845,7 @@ end
 
 % Chapters, in the main contents.
 \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
-%
+
 % Chapters, in the short toc.
 % See comments in \dochapentry re vbox and related settings.
 \def\shortchapentry#1#2#3#4{%
@@ -6238,7 +6860,7 @@ end
   \setbox0 = \hbox{\putwordAppendix{} M}%
   \hbox to \wd0{\putwordAppendix{} #1\hss}}
 %
-\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}}
 
 % Unnumbered chapters.
 \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
@@ -6271,6 +6893,8 @@ end
 \def\dochapentry#1#2{%
    \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
    \begingroup
+     % Move the page numbers slightly to the right
+     \advance\entryrightmargin by -0.05em
      \chapentryfonts
      \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    \endgroup
@@ -6327,12 +6951,12 @@ end
   \catcode `\>=\other
   \catcode `\`=\other
   \catcode `\'=\other
-  \escapechar=`\\
   %
   % ' is active in math mode (mathcode"8000).  So reset it, and all our
   % other math active characters (just in case), to plain's definitions.
   \mathactive
   %
+  % Inverse of the list at the beginning of the file.
   \let\b=\ptexb
   \let\bullet=\ptexbullet
   \let\c=\ptexc
@@ -6348,7 +6972,9 @@ end
   \let\+=\tabalign
   \let\}=\ptexrbrace
   \let\/=\ptexslash
+  \let\sp=\ptexsp
   \let\*=\ptexstar
+  %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode
   \let\t=\ptext
   \expandafter \let\csname top\endcsname=\ptextop  % we've made it outer
   \let\frenchspacing=\plainfrenchspacing
@@ -6387,6 +7013,24 @@ end
     \endgraf
     \ifdim\lastskip<\envskipamount
       \removelastskip
+      \ifnum\lastpenalty<10000
+        % Penalize breaking before the environment, because preceding text
+        % often leads into it.
+        \penalty100
+      \fi
+      \vskip\envskipamount
+    \fi
+  \fi
+}}
+
+\def\afterenvbreak{{%
+  % =10000 instead of <10000 because of a special case in \itemzzz and
+  % \sectionheading, q.v.
+  \ifnum \lastpenalty=10000 \else
+    \advance\envskipamount by \parskip
+    \endgraf
+    \ifdim\lastskip<\envskipamount
+      \removelastskip
       % it's not a good place to break if the last penalty was \nobreak
       % or better ...
       \ifnum\lastpenalty<10000 \penalty-50 \fi
@@ -6395,8 +7039,6 @@ end
   \fi
 }}
 
-\let\afterenvbreak = \aboveenvbreak
-
 % \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
 % also clear it, so that its embedded environments do the narrowing again.
 \let\nonarrowing=\relax
@@ -6440,7 +7082,7 @@ end
   % collide with the section heading.
   \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
   %
-  \vbox\bgroup
+  \setbox\groupbox=\vbox\bgroup
       \baselineskip=0pt\parskip=0pt\lineskip=0pt
       \carttop
       \hbox\bgroup
@@ -6464,6 +7106,7 @@ end
       \egroup
       \cartbot
   \egroup
+  \addgroupbox
   \checkinserts
 }
 
@@ -6846,7 +7489,7 @@ end
 % typesetting commands (@smallbook, font changes, etc.) have to be done
 % beforehand -- and a) we want @copying to be done first in the source
 % file; b) letting users define the frontmatter in as flexible order as
-% possible is very desirable.
+% possible is desirable.
 %
 \def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
 \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
@@ -6941,7 +7584,7 @@ end
   \temp
 }
 
-% \domakedefun \deffn \deffnx \deffnheader
+% \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) }
 %
 % Define \deffn and \deffnx, without parameters.
 % \deffnheader has to be defined explicitly.
@@ -7279,34 +7922,49 @@ end
   }
 \fi
 
-\def\scanmacro#1{\begingroup
+\let\aftermacroxxx\relax
+\def\aftermacro{\aftermacroxxx}
+
+% alias because \c means cedilla in @tex or @math
+\let\texinfoc=\c
+
+\newcount\savedcatcodeone
+\newcount\savedcatcodetwo
+
+% Used at the time of macro expansion.
+% Argument is macro body with arguments substituted
+\def\scanmacro#1{%
   \newlinechar`\^^M
-  \let\xeatspaces\eatspaces
+  \def\xeatspaces{\eatspaces}%
   %
-  % Undo catcode changes of \startcontents and \doprintindex
-  % When called from @insertcopying or (short)caption, we need active
-  % backslash to get it printed correctly.  Previously, we had
-  % \catcode`\\=\other instead.  We'll see whether a problem appears
-  % with macro expansion.                              --kasal, 19aug04
-  \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
+  % Temporarily undo catcode changes of \printindex.  Set catcode of @ to
+  % 0 so that @-commands in macro expansions aren't printed literally when 
+  % formatting an index file, where \ is used as the escape character.
+  \savedcatcodeone=\catcode`\@
+  \savedcatcodetwo=\catcode`\\
+  \catcode`\@=0
+  \catcode`\\=\active
   %
-  % ... and for \example:
-  \spaceisspace
+  % Process the macro body under the current catcode regime.
+  \scantokens{#1@texinfoc}\aftermacro%
   %
-  % The \empty here causes a following catcode 5 newline to be eaten as
-  % part of reading whitespace after a control sequence.  It does not
-  % eat a catcode 13 newline.  There's no good way to handle the two
-  % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX
-  % would then have different behavior).  See the Macro Details node in
-  % the manual for the workaround we recommend for macros and
-  % line-oriented commands.
-  % 
-  \scantokens{#1\empty}%
-\endgroup}
+  \catcode`\@=\savedcatcodeone
+  \catcode`\\=\savedcatcodetwo
+  %
+  % The \texinfoc is to remove the \newlinechar added by \scantokens, and
+  % can be noticed by \parsearg.
+  %   The \aftermacro allows a \comment at the end of the macro definition
+  % to duplicate itself past the final \newlinechar added by \scantokens:
+  % this is used in the definition of \group to comment out a newline.  We
+  % don't do the same for \c to support Texinfo files with macros that ended
+  % with a @c, which should no longer be necessary.
+  %   We avoid surrounding the call to \scantokens with \bgroup and \egroup
+  % to allow macros to open or close groups themselves.
+}
 
+% Used for copying and captions
 \def\scanexp#1{%
-  \edef\temp{\noexpand\scanmacro{#1}}%
-  \temp
+  \expandafter\scanmacro\expandafter{#1}%
 }
 
 \newcount\paramno   % Count of parameters
@@ -7372,48 +8030,45 @@ end
   \catcode`\+=\other
   \catcode`\<=\other
   \catcode`\>=\other
-  \catcode`\@=\other
   \catcode`\^=\other
   \catcode`\_=\other
   \catcode`\|=\other
   \catcode`\~=\other
-  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
+  \passthroughcharstrue
 }
 
 \def\scanargctxt{% used for copying and captions, not macros.
   \scanctxt
+  \catcode`\@=\other
   \catcode`\\=\other
   \catcode`\^^M=\other
 }
 
 \def\macrobodyctxt{% used for @macro definitions
   \scanctxt
+  \catcode`\ =\other
+  \catcode`\@=\other
   \catcode`\{=\other
   \catcode`\}=\other
   \catcode`\^^M=\other
   \usembodybackslash
 }
 
-\def\macroargctxt{% used when scanning invocations
+% Used when scanning braced macro arguments.  Note, however, that catcode
+% changes here are ineffectual if the macro invocation was nested inside
+% an argument to another Texinfo command.
+\def\macroargctxt{%
   \scanctxt
-  \catcode`\\=0
+  \catcode`\ =\active
+  \catcode`\^^M=\other
+  \catcode`\\=\active
 }
-% why catcode 0 for \ in the above?  To recognize \\ \{ \} as "escapes"
-% for the single characters \ { }.  Thus, we end up with the "commands"
-% that would be written @\ @{ @} in a Texinfo document.
-% 
-% We already have @{ and @}.  For @\, we define it here, and only for
-% this purpose, to produce a typewriter backslash (so, the @\ that we
-% define for @math can't be used with @macro calls):
-%
-\def\\{\normalbackslash}%
-% 
-% We would like to do this for \, too, since that is what makeinfo does.
-% But it is not possible, because Texinfo already has a command @, for a
-% cedilla accent.  Documents must use @comma{} instead.
-%
-% \anythingelse will almost certainly be an error of some kind.
 
+\def\macrolineargctxt{% used for whole-line arguments without braces
+  \scanctxt
+  \catcode`\{=\other
+  \catcode`\}=\other
+}
 
 % \mbodybackslash is the definition of \ in @macro bodies.
 % It maps \foo\ => \csname macarg.foo\endcsname => #N
@@ -7485,57 +8140,36 @@ end
   \fi
 }
 
-% This makes use of the obscure feature that if the last token of a
-% <parameter list> is #, then the preceding argument is delimited by
-% an opening brace, and that opening brace is not consumed.
+% \getargs -- Parse the arguments to a @macro line.  Set \macname to
+% the name of the macro, and \argl to the braced argument list.
 \def\getargs#1{\getargsxxx#1{}}
 \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
 \def\getmacname#1 #2\relax{\macname={#1}}
 \def\getmacargs#1{\def\argl{#1}}
+% This made use of the feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
 
-% For macro processing make @ a letter so that we can make Texinfo private macro names.
-\edef\texiatcatcode{\the\catcode`\@}
-\catcode `@=11\relax
-
-% Parse the optional {params} list.  Set up \paramno and \paramlist
-% so \defmacro knows what to do.  Define \macarg.BLAH for each BLAH
-% in the params list to some hook where the argument is to be expanded.  If
-% there are less than 10 arguments that hook is to be replaced by ##N where N
+% Parse the optional {params} list to @macro or @rmacro.
+% Set \paramno to the number of arguments,
+% and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a
+% three-param macro.)  Define \macarg.BLAH for each BLAH in the params
+% list to some hook where the argument is to be expanded.  If there are
+% less than 10 arguments that hook is to be replaced by ##N where N
 % is the position in that list, that is to say the macro arguments are to be
 % defined `a la TeX in the macro body.  
 %
 % That gets used by \mbodybackslash (above).
 %
-% We need to get `macro parameter char #' into several definitions.
-% The technique used is stolen from LaTeX: let \hash be something
-% unexpandable, insert that wherever you need a #, and then redefine
-% it to # just before using the token list produced.
-%
-% The same technique is used to protect \eatspaces till just before
-% the macro is used.
-%
-% If there are 10 or more arguments, a different technique is used, where the
-% hook remains in the body, and when macro is to be expanded the body is
-% processed again to replace the arguments.
-%
-% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
-% argument N value and then \edef  the body (nothing else will expand because of
-% the catcode regime underwhich the body was input).
+% If there are 10 or more arguments, a different technique is used: see
+% \parsemmanyargdef.
 %
-% If you compile with TeX (not eTeX), and you have macros with 10 or more
-% arguments, you need that no macro has more than 256 arguments, otherwise an
-% error is produced.
 \def\parsemargdef#1;{%
   \paramno=0\def\paramlist{}%
   \let\hash\relax
+  % \hash is redefined to `#' later to get it into definitions
   \let\xeatspaces\relax
   \parsemargdefxxx#1,;,%
-  % In case that there are 10 or more arguments we parse again the arguments
-  % list to set new definitions for the \macarg.BLAH macros corresponding to
-  % each BLAH argument. It was anyhow needed to parse already once this list
-  % in order to count the arguments, and as macros with at most 9 arguments
-  % are by far more frequent than macro with 10 or more arguments, defining
-  % twice the \macarg.BLAH macros does not cost too much processing power.
   \ifnum\paramno<10\relax\else
     \paramno0\relax
     \parsemmanyargdef@@#1,;,% 10 or more arguments
@@ -7550,6 +8184,43 @@ end
     \edef\paramlist{\paramlist\hash\the\paramno,}%
   \fi\next}
 
+% \parsemacbody, \parsermacbody
+%
+% Read recursive and nonrecursive macro bodies. (They're different since
+% rec and nonrec macros end differently.)
+% 
+% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro 
+% body to be transformed.
+% Set \macrobody to the body of the macro, and call \defmacro.
+%
+{\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+{\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+
+% Make @ a letter, so that we can make private-to-Texinfo macro names.
+\edef\texiatcatcode{\the\catcode`\@}
+\catcode `@=11\relax
+
+%%%%%%%%%%%%%% Code for > 10 arguments only   %%%%%%%%%%%%%%%%%%
+
+% If there are 10 or more arguments, a different technique is used, where the
+% hook remains in the body, and when macro is to be expanded the body is
+% processed again to replace the arguments.
+%
+% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
+% argument N value and then \edef the body (nothing else will expand because of
+% the catcode regime under which the body was input).
+%
+% If you compile with TeX (not eTeX), and you have macros with 10 or more
+% arguments, no macro can have more than 256 arguments (else error).
+%
+% In case that there are 10 or more arguments we parse again the arguments
+% list to set new definitions for the \macarg.BLAH macros corresponding to
+% each BLAH argument. It was anyhow needed to parse already once this list
+% in order to count the arguments, and as macros with at most 9 arguments
+% are by far more frequent than macro with 10 or more arguments, defining
+% twice the \macarg.BLAH macros does not cost too much processing power.
 \def\parsemmanyargdef@@#1,{%
   \if#1;\let\next=\relax
   \else 
@@ -7565,16 +8236,6 @@ end
     \advance\paramno by 1\relax
   \fi\next}
 
-% These two commands read recursive and nonrecursive macro bodies.
-% (They're different since rec and nonrec macros end differently.)
-%
-
-\catcode `\@\texiatcatcode
-\long\def\parsemacbody#1@end macro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\long\def\parsermacbody#1@end rmacro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\catcode `\@=11\relax
 
 \let\endargs@\relax
 \let\nil@\relax
@@ -7582,7 +8243,7 @@ end
 \long\def\nillm@{\nil@}%
 
 % This macro is expanded during the Texinfo macro expansion, not during its
-% definition.  It gets all the arguments values and assigns them to macros
+% definition.  It gets all the arguments' values and assigns them to macros
 % macarg.ARGNAME
 %
 % #1 is the macro name
@@ -7603,8 +8264,6 @@ end
     \getargvals@@
   \fi
 }
-
-% 
 \def\getargvals@@{%
   \ifx\paramlist\nilm@
       % Some sanity check needed here that \argvaluelist is also empty.
@@ -7648,7 +8307,8 @@ end
 }
 
 % Replace arguments by their values in the macro body, and place the result
-% in macro \@tempa
+% in macro \@tempa.
+% 
 \def\macvalstoargs@{%
   %  To do this we use the property that token registers that are \the'ed
   % within an \edef  expand only once. So we are going to place all argument
@@ -7672,8 +8332,9 @@ end
   \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
   }
 
+% Define the named-macro outside of this group and then close this group. 
+% 
 \def\macargexpandinbody@{% 
-  %% Define the named-macro outside of this group and then close this group. 
   \expandafter
   \endgroup
   \macargdeflist@
@@ -7710,14 +8371,8 @@ end
   \next
 }
 
-% Save the token stack pointer into macro #1
-\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}}
-% Restore the token stack pointer from number in macro #1
-\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax}
-% newtoks that can be used non \outer .
-\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi}
-
-% Tailing missing arguments are set to empty
+% Trailing missing arguments are set to empty.
+% 
 \def\setemptyargvalues@{%
   \ifx\paramlist\nilm@
     \let\next\macargexpandinbody@
@@ -7747,99 +8402,228 @@ end
    \long\def#2{#4}%
 }
 
-% This defines a Texinfo @macro. There are eight cases: recursive and
-% nonrecursive macros of zero, one, up to nine, and many arguments.
-% Much magic with \expandafter here.
+
+%%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%%
+
+
+% This defines a Texinfo @macro or @rmacro, called by \parsemacbody.
+%    \macrobody has the body of the macro in it, with placeholders for
+% its parameters, looking like "\xeatspaces{\hash 1}".
+%    \paramno is the number of parameters
+%    \paramlist is a TeX parameter text, e.g. "#1,#2,#3,"
+% There are eight cases: recursive and nonrecursive macros of zero, one,
+% up to nine, and many arguments.
 % \xdef is used so that macro definitions will survive the file
-% they're defined in; @include reads the file inside a group.
+% they're defined in: @include reads the file inside a group.
 %
 \def\defmacro{%
   \let\hash=##% convert placeholders to macro parameter chars
-  \ifrecursive
+  \ifnum\paramno=1
+    \def\xeatspaces##1{##1}%
+    % This removes the pair of braces around the argument.  We don't
+    % use \eatspaces, because this can cause ends of lines to be lost
+    % when the argument to \eatspaces is read, leading to line-based
+    % commands like "@itemize" not being read correctly.
+  \else
+    \let\xeatspaces\relax % suppress expansion
+  \fi
+  \ifrecursive   %%%%%%%%%%%%%% Recursive %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     \ifcase\paramno
     % 0
       \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\scanmacro{\temp}}%
+        \noexpand\scanmacro{\macrobody}}%
     \or % 1
       \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
+         \bgroup
          \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-         \egroup\noexpand\scanmacro{\temp}}%
+         \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+      \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+        \egroup
+        \noexpand\scanmacro{\macrobody}%
+        }%
     \else
       \ifnum\paramno<10\relax % at most 9
+        % See non-recursive section below for comments
         \expandafter\xdef\csname\the\macname\endcsname{%
-           \bgroup\noexpand\macroargctxt
-           \noexpand\csname\the\macname xx\endcsname}%
-        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+          \bgroup
+          \noexpand\expandafter
+          \noexpand\macroargctxt
+          \noexpand\expandafter
+          \expandafter\noexpand\csname\the\macname @@\endcsname}%
+        \expandafter\xdef\csname\the\macname @@\endcsname##1{%
+            \noexpand\passargtomacro
+            \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
+        \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+            \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
         \expandafter\expandafter
         \expandafter\xdef
         \expandafter\expandafter
-          \csname\the\macname xxx\endcsname
-            \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+          \csname\the\macname @@@@\endcsname\paramlist{%
+            \egroup\noexpand\scanmacro{\macrobody}}%
       \else % 10 or more
         \expandafter\xdef\csname\the\macname\endcsname{%
           \noexpand\getargvals@{\the\macname}{\argl}%
         }%    
-        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+        \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody
         \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
       \fi
     \fi
-  \else
+  \else  %%%%%%%%%%%%%%%%%%%%%% Non-recursive %%%%%%%%%%%%%%%%%%%%%%%%%%
     \ifcase\paramno
     % 0
       \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
+        \noexpand\scanmacro{\macrobody}}%
     \or % 1
       \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
+         \bgroup
          \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+         \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+      \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
         \egroup
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
+        \noexpand\scanmacro{\macrobody}%
+        }%
     \else % at most 9
       \ifnum\paramno<10\relax
+        % @MACNAME sets the context for reading the macro argument
+        % @MACNAME@@ gets the argument, processes backslashes and appends a 
+        % comma.
+        % @MACNAME@@@ removes braces surrounding the argument list.
+        % @MACNAME@@@@ scans the macro body with arguments substituted.
         \expandafter\xdef\csname\the\macname\endcsname{%
-           \bgroup\noexpand\macroargctxt
-           \expandafter\noexpand\csname\the\macname xx\endcsname}%
-        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+          \bgroup
+          \noexpand\expandafter  % This \expandafter skip any spaces after the
+          \noexpand\macroargctxt % macro before we change the catcode of space.
+          \noexpand\expandafter
+          \expandafter\noexpand\csname\the\macname @@\endcsname}%
+        \expandafter\xdef\csname\the\macname @@\endcsname##1{%
+            \noexpand\passargtomacro
+            \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
+        \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+            \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
         \expandafter\expandafter
         \expandafter\xdef
         \expandafter\expandafter
-        \csname\the\macname xxx\endcsname
-        \paramlist{%
-            \egroup
-            \noexpand\norecurse{\the\macname}%
-            \noexpand\scanmacro{\temp}\egroup}%
+          \csname\the\macname @@@@\endcsname\paramlist{%
+            \egroup\noexpand\scanmacro{\macrobody}}%
       \else % 10 or more:
         \expandafter\xdef\csname\the\macname\endcsname{%
           \noexpand\getargvals@{\the\macname}{\argl}%
         }%
-        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+        \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody
         \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse
       \fi
     \fi
   \fi}
 
-\catcode `\@\texiatcatcode\relax
+\catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes
 
 \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
 
-% \braceorline decides whether the next nonwhitespace character is a
-% {.  If so it reads up to the closing }, if not, it reads the whole
-% line.  Whatever was read is then fed to the next control sequence
-% as an argument (by \parsebrace or \parsearg).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+{\catcode`\@=0 \catcode`\\=13  % We need to manipulate \ so use @ as escape
+@catcode`@_=11  % private names
+@catcode`@!=11  % used as argument separator
+
+% \passargtomacro#1#2 -
+% Call #1 with a list of tokens #2, with any doubled backslashes in #2
+% compressed to one.
+%
+% This implementation works by expansion, and not execution (so we cannot use 
+% \def or similar).  This reduces the risk of this failing in contexts where 
+% complete expansion is done with no execution (for example, in writing out to 
+% an auxiliary file for an index entry).
+% 
+% State is kept in the input stream: the argument passed to
+% @look_ahead, @gobble_and_check_finish and @add_segment is
+%
+% THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN  (... rest of input)
+%
+% where:
+% THE_MACRO - name of the macro we want to call
+% ARG_RESULT - argument list we build to pass to that macro
+% PENDING_BS - either a backslash or nothing
+% NEXT_TOKEN - used to look ahead in the input stream to see what's coming next
+
+@gdef@passargtomacro#1#2{%
+  @add_segment #1!{}@relax#2\@_finish\%
+}
+@gdef@_finish{@_finishx} @global@let@_finishx@relax
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 used to look ahead
+%
+% If the next token is not a backslash, process the rest of the argument; 
+% otherwise, remove the next token.
+@gdef@look_ahead#1!#2#3#4{%
+  @ifx#4\%
+   @expandafter@gobble_and_check_finish 
+  @else
+   @expandafter@add_segment
+  @fi#1!{#2}#4#4%
+}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 should be a backslash, which is gobbled.
+% #5 looks ahead
+%
+% Double backslash found.  Add a single backslash, and look ahead.
+@gdef@gobble_and_check_finish#1!#2#3#4#5{%
+  @add_segment#1\!{}#5#5%
+}
+
+@gdef@is_fi{@fi}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 is input stream until next backslash
+%
+% Input stream is either at the start of the argument, or just after a 
+% backslash sequence, either a lone backslash, or a doubled backslash.  
+% NEXT_TOKEN contains the first token in the input stream: if it is \finish, 
+% finish; otherwise, append to ARG_RESULT the segment of the argument up until
+% the next backslash.  PENDING_BACKSLASH contains a backslash to represent
+% a backslash just before the start of the input stream that has not been
+% added to ARG_RESULT.
+@gdef@add_segment#1!#2#3#4\{%
+@ifx#3@_finish
+  @call_the_macro#1!%
+@else
+  % append the pending backslash to the result, followed by the next segment
+  @expandafter@is_fi@look_ahead#1#2#4!{\}@fi
+  % this @fi is discarded by @look_ahead.
+  % we can't get rid of it with \expandafter because we don't know how 
+  % long #4 is.
+}
+
+% #1 - THE_MACRO
+% #2 - ARG_RESULT
+% #3 discards the res of the conditional in @add_segment, and @is_fi ends the 
+% conditional.
+@gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
+
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \braceorline MAC is used for a one-argument macro MAC.  It checks
+% whether the next non-whitespace character is a {.  It sets the context
+% for reading the argument (slightly different in the two cases).  Then,
+% to read the argument, in the whole-line case, it then calls the regular
+% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
 % 
 \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
 \def\braceorlinexxx{%
-  \ifx\nchar\bgroup\else
-    \expandafter\parsearg
+  \ifx\nchar\bgroup
+    \macroargctxt
+    \expandafter\passargtomacro
+  \else
+    \macrolineargctxt\expandafter\parsearg
   \fi \macnamexxx}
 
 
@@ -7921,6 +8705,7 @@ end
   \pdfmkdest{#1}%
   \iflinks
     {%
+      \requireauxfile
       \atdummies  % preserve commands, but don't expand them
       \edef\writexrdef##1##2{%
        \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
@@ -7960,9 +8745,12 @@ end
 % node name, #4 the name of the Info file, #5 the name of the printed
 % manual.  All but the node name can be omitted.
 %
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\pxref{\putwordsee{} \xrefXX}
+\def\xref{\putwordSee{} \xrefXX}
+\def\ref{\xrefXX}
+
+\def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX}
+\def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]}
 %
 \newbox\toprefbox
 \newbox\printedrefnamebox
@@ -8009,6 +8797,7 @@ end
   %
   % Make link in pdf output.
   \ifpdf
+    % For pdfTeX and LuaTeX
     {\indexnofonts
      \turnoffactive
      \makevalueexpandable
@@ -8035,19 +8824,61 @@ end
      \fi
     }%
     \setcolor{\linkcolor}%
+  \else
+    \ifx\XeTeXrevision\thisisundefined
+    \else
+      % For XeTeX
+      {\indexnofonts
+       \turnoffactive
+       \makevalueexpandable
+       % This expands tokens, so do it after making catcode changes, so _
+       % etc. don't get their TeX definitions.  This ignores all spaces in
+       % #4, including (wrongly) those in the middle of the filename.
+       \getfilename{#4}%
+       %
+       % This (wrongly) does not take account of leading or trailing
+       % spaces in #1, which should be ignored.
+       \iftxiuseunicodedestname
+         \def\pdfxrefdest{#1}% Pass through Unicode characters.
+       \else
+         \edef\pdfxrefdest{#1}% Replace Unicode characters to ASCII.
+       \fi
+       \ifx\pdfxrefdest\empty
+         \def\pdfxrefdest{Top}% no empty targets
+       \else
+         \txiescapepdf\pdfxrefdest  % escape PDF special chars
+       \fi
+       %
+       \leavevmode
+       \ifnum\filenamelength>0
+         % By the default settings,
+         % XeTeX (xdvipdfmx) replaces link destination names with integers.
+         % In this case, the replaced destination names of
+         % remote PDF cannot be known. In order to avoid replacement,
+         % you can use commandline option `-C 0x0010' for xdvipdfmx.
+         \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
+           << /S /GoToR /F (\the\filename.pdf) /D (name\pdfxrefdest) >> >>}%
+       \else
+         \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
+           << /S /GoTo /D (name\pdfxrefdest) >> >>}%
+       \fi
+      }%
+      \setcolor{\linkcolor}%
+    \fi
   \fi
-  %
-  % Float references are printed completely differently: "Figure 1.2"
-  % instead of "[somenode], p.3".  We distinguish them by the
-  % LABEL-title being set to a magic string.
   {%
     % Have to otherify everything special to allow the \csname to
     % include an _ in the xref name, etc.
     \indexnofonts
     \turnoffactive
+    \def\value##1{##1}%
     \expandafter\global\expandafter\let\expandafter\Xthisreftitle
       \csname XR#1-title\endcsname
   }%
+  %
+  % Float references are printed completely differently: "Figure 1.2"
+  % instead of "[somenode], p.3".  \iffloat distinguishes them by
+  % \Xthisreftitle being set to a magic string.
   \iffloat\Xthisreftitle
     % If the user specified the print name (third arg) to the ref,
     % print it instead of our usual "Figure 1.2".
@@ -8106,6 +8937,15 @@ end
       %
       % output the `page 3'.
       \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+      % Add a , if xref followed by a space
+      \if\space\noexpand\tokenafterxref ,%
+      \else\ifx\       \tokenafterxref ,% @TAB
+      \else\ifx\*\tokenafterxref ,%   @*
+      \else\ifx\ \tokenafterxref ,%   @SPACE
+      \else\ifx\
+                \tokenafterxref ,%    @NL
+      \else\ifx\tie\tokenafterxref ,% @tie
+      \fi\fi\fi\fi\fi\fi
     \fi\fi
   \fi
   \endlink
@@ -8172,13 +9012,14 @@ end
   \fi\fi\fi
 }
 
-% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
-% If its value is nonempty, SUFFIX is output afterward.
-%
+% \refx{NAME}{SUFFIX} - reference a cross-reference string named NAME.  SUFFIX 
+% is output afterwards if non-empty.
 \def\refx#1#2{%
+  \requireauxfile
   {%
     \indexnofonts
     \otherbackslash
+    \def\value##1{##1}%
     \expandafter\global\expandafter\let\expandafter\thisrefX
       \csname XR#1\endcsname
   }%
@@ -8203,16 +9044,18 @@ end
   #2% Output the suffix in any case.
 }
 
-% This is the macro invoked by entries in the aux file.  Usually it's
-% just a \def (we prepend XR to the control sequence name to avoid
-% collisions).  But if this is a float type, we have more work to do.
+% This is the macro invoked by entries in the aux file.  Define a control 
+% sequence for a cross-reference target (we prepend XR to the control sequence 
+% name to avoid collisions).  The value is the page number.  If this is a float 
+% type, we have more work to do.
 %
 \def\xrdef#1#2{%
-  {% The node name might contain 8-bit characters, which in our current
-   % implementation are changed to commands like @'e.  Don't let these
-   % mess up the control sequence name.
+  {% Expand the node or anchor name to remove control sequences.
+   % \turnoffactive stops 8-bit characters being changed to commands
+   % like @'e.  \refx does the same to retrieve the value in the definition.
     \indexnofonts
     \turnoffactive
+    \def\value##1{##1}%
     \xdef\safexrefname{#1}%
   }%
   %
@@ -8239,6 +9082,23 @@ end
   \fi
 }
 
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate at the beginning of the file.
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% Used when writing to the aux file, or when using data from it.
+\def\requireauxfile{%
+  \iflinks
+    \tryauxfile
+    % Open the new aux file.  TeX will close it automatically at exit.
+    \immediate\openout\auxfile=\jobname.aux
+  \fi
+  \global\let\requireauxfile=\relax   % Only do this once.
+}
+
 % Read the last existing aux file, if any.  No error if none exists.
 %
 \def\tryauxfile{%
@@ -8317,16 +9177,6 @@ end
   % now.  --karl, 15jan04.
   \catcode`\\=\other
   %
-  % Make the characters 128-255 be printing characters.
-  {%
-    \count1=128
-    \def\loop{%
-      \catcode\count1=\other
-      \advance\count1 by 1
-      \ifnum \count1<256 \loop \fi
-    }%
-  }%
-  %
   % @ is our escape character in .aux files, and we need braces.
   \catcode`\{=1
   \catcode`\}=2
@@ -8359,9 +9209,6 @@ end
 %
 % Auto-number footnotes.  Otherwise like plain.
 \gdef\footnote{%
-  \let\indent=\ptexindent
-  \let\noindent=\ptexnoindent
-  %
   \global\advance\footnoteno by \@ne
   \edef\thisfootno{$^{\the\footnoteno}$}%
   %
@@ -8388,12 +9235,12 @@ end
   %
   % Nested footnotes are not supported in TeX, that would take a lot
   % more work.  (\startsavinginserts does not suffice.)
-  \let\footnote=\errfootnote
+  \let\footnote=\errfootnotenest
   %
   % We want to typeset this text as a normal paragraph, even if the
   % footnote reference occurs in (for example) a display environment.
   % So reset some parameters.
-  \hsize=\pagewidth
+  \hsize=\txipagewidth
   \interlinepenalty\interfootnotelinepenalty
   \splittopskip\ht\strutbox % top baseline for broken footnotes
   \splitmaxdepth\dp\strutbox
@@ -8427,12 +9274,17 @@ end
 }
 }%end \catcode `\@=11
 
-\def\errfootnote{%
+\def\errfootnotenest{%
   \errhelp=\EMsimple
   \errmessage{Nested footnotes not supported in texinfo.tex,
     even though they work in makeinfo; sorry}
 }
 
+\def\errfootnoteheading{%
+  \errhelp=\EMsimple
+  \errmessage{Footnotes in chapters, sections, etc., are not supported}
+}
+
 % In case a @footnote appears in a vbox, save the footnote text and create
 % the real \insert just after the vbox finished.  Otherwise, the insertion
 % would be lost.
@@ -8537,6 +9389,7 @@ end
 \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
   \catcode`\^^M = 5     % in case we're inside an example
   \normalturnoffactive  % allow _ et al. in names
+  \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro
   % If the image is by itself, center it.
   \ifvmode
     \imagevmodetrue
@@ -8566,12 +9419,21 @@ end
   %
   % Output the image.
   \ifpdf
+    % For pdfTeX and LuaTeX <= 0.80
     \dopdfimage{#1}{#2}{#3}%
   \else
-    % \epsfbox itself resets \epsf?size at each figure.
-    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-    \epsfbox{#1.eps}%
+    \ifx\XeTeXrevision\thisisundefined
+      % For epsf.tex
+      % \epsfbox itself resets \epsf?size at each figure.
+      \setbox0 = \hbox{\ignorespaces #2}%
+        \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+      \setbox0 = \hbox{\ignorespaces #3}%
+        \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+      \epsfbox{#1.eps}%
+    \else
+      % For XeTeX
+      \doxeteximage{#1}{#2}{#3}%
+    \fi
   \fi
   %
   \ifimagevmode
@@ -8693,7 +9555,7 @@ end
     %
     \ifx\thiscaption\empty \else
       \ifx\floatident\empty \else
-       \appendtomacro\captionline{: }% had ident, so need a colon between
+        \appendtomacro\captionline{: }% had ident, so need a colon between
       \fi
       %
       % caption text.
@@ -8717,32 +9579,20 @@ end
       % \floatlabel-lof.  Besides \floatident, we include the short
       % caption if specified, else the full caption if specified, else nothing.
       {%
+        \requireauxfile
         \atdummies
         %
-        % since we read the caption text in the macro world, where ^^M
-        % is turned into a normal character, we have to scan it back, so
-        % we don't write the literal three characters "^^M" into the aux file.
-       \scanexp{%
-         \xdef\noexpand\gtemp{%
-           \ifx\thisshortcaption\empty
-             \thiscaption
-           \else
-             \thisshortcaption
-           \fi
-         }%
-       }%
+        \ifx\thisshortcaption\empty
+          \def\gtemp{\thiscaption}%
+        \else
+          \def\gtemp{\thisshortcaption}%
+        \fi
         \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
-         \ifx\gtemp\empty \else : \gtemp \fi}}%
+          \ifx\gtemp\empty \else : \gtemp \fi}}%
       }%
     \fi
   \egroup  % end of \vtop
   %
-  % place the captured inserts
-  %
-  % BEWARE: when the floats start floating, we have to issue warning
-  % whenever an insert appears inside a float which could possibly
-  % float. --kasal, 26may04
-  %
   \checkinserts
 }
 
@@ -8917,6 +9767,70 @@ directory should work if nowhere else does.}
   \global\righthyphenmin = #3\relax
 }
 
+% XeTeX and LuaTeX can handle native Unicode.
+% Their default I/O is UTF-8 sequence instead of byte-wise.
+% Other TeX engine (pdfTeX etc.) I/O is byte-wise.
+%
+\newif\iftxinativeunicodecapable
+\newif\iftxiusebytewiseio
+
+\ifx\XeTeXrevision\thisisundefined
+  \ifx\luatexversion\thisisundefined
+    \txinativeunicodecapablefalse
+    \txiusebytewiseiotrue
+  \else
+    \txinativeunicodecapabletrue
+    \txiusebytewiseiofalse
+  \fi
+\else
+  \txinativeunicodecapabletrue
+  \txiusebytewiseiofalse
+\fi
+
+% Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex
+% for non-UTF-8 (byte-wise) encodings.
+%
+\def\setbytewiseio{%
+  \ifx\XeTeXrevision\thisisundefined
+  \else
+    \XeTeXdefaultencoding "bytes"  % For subsequent files to be read
+    \XeTeXinputencoding "bytes"  % For document root file
+    % Unfortunately, there seems to be no corresponding XeTeX command for
+    % output encoding.  This is a problem for auxiliary index and TOC files.
+    % The only solution would be perhaps to write out @U{...} sequences in
+    % place of non-ASCII characters.
+  \fi
+
+  \ifx\luatexversion\thisisundefined
+  \else
+    \directlua{
+    local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub
+    local function convert_char (char)
+      return utf8_char(byte(char))
+    end
+
+    local function convert_line (line)
+      return gsub(line, ".", convert_char)
+    end
+
+    callback.register("process_input_buffer", convert_line)
+
+    local function convert_line_out (line)
+      local line_out = ""
+      for c in string.utfvalues(line) do
+         line_out = line_out .. string.char(c)
+      end
+      return line_out
+    end
+
+    callback.register("process_output_buffer", convert_line_out)
+    }
+  \fi
+
+  \txiusebytewiseiotrue
+}
+
+
 % Helpers for encodings.
 % Set the catcode of characters 128 through 255 to the specified number.
 %
@@ -8939,7 +9853,9 @@ directory should work if nowhere else does.}
 % @documentencoding sets the definition of non-ASCII characters
 % according to the specified encoding.
 %
-\parseargdef\documentencoding{%
+\def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz}
+\def\documentencodingzzz#1{%
+  %
   % Encoding being declared for the document.
   \def\declaredencoding{\csname #1.enc\endcsname}%
   %
@@ -8955,23 +9871,40 @@ directory should work if nowhere else does.}
      \asciichardefs
   %
   \else \ifx \declaredencoding \lattwo
+     \iftxinativeunicodecapable
+       \setbytewiseio
+     \fi
      \setnonasciicharscatcode\active
      \lattwochardefs
   %
   \else \ifx \declaredencoding \latone
+     \iftxinativeunicodecapable
+       \setbytewiseio
+     \fi
      \setnonasciicharscatcode\active
      \latonechardefs
   %
   \else \ifx \declaredencoding \latnine
+     \iftxinativeunicodecapable
+       \setbytewiseio
+     \fi
      \setnonasciicharscatcode\active
      \latninechardefs
   %
   \else \ifx \declaredencoding \utfeight
-     \setnonasciicharscatcode\active
-     \utfeightchardefs
+     \iftxinativeunicodecapable
+       % For native Unicode (XeTeX and LuaTeX)
+       \nativeunicodechardefs
+     \else
+       % For UTF-8 byte sequence (TeX, eTeX and pdfTeX)
+       \setnonasciicharscatcode\active
+       % since we already invoked \utfeightchardefs at the top level
+       % (below), do not re-invoke it, then our check for duplicated
+       % definitions triggers.  Making non-ascii chars active is enough.
+     \fi
   %
   \else
-    \message{Unknown document encoding #1, ignoring.}%
+    \message{Ignoring unknown document encoding: #1.}%
   %
   \fi % utfeight
   \fi % latnine
@@ -8980,10 +9913,11 @@ directory should work if nowhere else does.}
   \fi % ascii
 }
 
+% emacs-page
 % A message to be logged when using a character that isn't available
 % the default font encoding (OT1).
 %
-\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
+\def\missingcharmsg#1{\message{Character missing, sorry: #1.}}
 
 % Take account of \c (plain) vs. \, (Texinfo) difference.
 \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
@@ -8993,111 +9927,119 @@ directory should work if nowhere else does.}
 % macros containing the character definitions.
 \setnonasciicharscatcode\active
 %
+
+\def\gdefchar#1#2{%
+\gdef#1{%
+   \ifpassthroughchars
+     \string#1%
+   \else
+     #2%
+   \fi
+}}
+
 % Latin1 (ISO-8859-1) character definitions.
 \def\latonechardefs{%
-  \gdef^^a0{\tie}
-  \gdef^^a1{\exclamdown}
-  \gdef^^a2{\missingcharmsg{CENT SIGN}}
-  \gdef^^a3{{\pounds}}
-  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
-  \gdef^^a5{\missingcharmsg{YEN SIGN}}
-  \gdef^^a6{\missingcharmsg{BROKEN BAR}}
-  \gdef^^a7{\S}
-  \gdef^^a8{\"{}}
-  \gdef^^a9{\copyright}
-  \gdef^^aa{\ordf}
-  \gdef^^ab{\guillemetleft}
-  \gdef^^ac{$\lnot$}
-  \gdef^^ad{\-}
-  \gdef^^ae{\registeredsymbol}
-  \gdef^^af{\={}}
-  %
-  \gdef^^b0{\textdegree}
-  \gdef^^b1{$\pm$}
-  \gdef^^b2{$^2$}
-  \gdef^^b3{$^3$}
-  \gdef^^b4{\'{}}
-  \gdef^^b5{$\mu$}
-  \gdef^^b6{\P}
-  %
-  \gdef^^b7{$^.$}
-  \gdef^^b8{\cedilla\ }
-  \gdef^^b9{$^1$}
-  \gdef^^ba{\ordm}
-  %
-  \gdef^^bb{\guillemetright}
-  \gdef^^bc{$1\over4$}
-  \gdef^^bd{$1\over2$}
-  \gdef^^be{$3\over4$}
-  \gdef^^bf{\questiondown}
-  %
-  \gdef^^c0{\`A}
-  \gdef^^c1{\'A}
-  \gdef^^c2{\^A}
-  \gdef^^c3{\~A}
-  \gdef^^c4{\"A}
-  \gdef^^c5{\ringaccent A}
-  \gdef^^c6{\AE}
-  \gdef^^c7{\cedilla C}
-  \gdef^^c8{\`E}
-  \gdef^^c9{\'E}
-  \gdef^^ca{\^E}
-  \gdef^^cb{\"E}
-  \gdef^^cc{\`I}
-  \gdef^^cd{\'I}
-  \gdef^^ce{\^I}
-  \gdef^^cf{\"I}
-  %
-  \gdef^^d0{\DH}
-  \gdef^^d1{\~N}
-  \gdef^^d2{\`O}
-  \gdef^^d3{\'O}
-  \gdef^^d4{\^O}
-  \gdef^^d5{\~O}
-  \gdef^^d6{\"O}
-  \gdef^^d7{$\times$}
-  \gdef^^d8{\O}
-  \gdef^^d9{\`U}
-  \gdef^^da{\'U}
-  \gdef^^db{\^U}
-  \gdef^^dc{\"U}
-  \gdef^^dd{\'Y}
-  \gdef^^de{\TH}
-  \gdef^^df{\ss}
-  %
-  \gdef^^e0{\`a}
-  \gdef^^e1{\'a}
-  \gdef^^e2{\^a}
-  \gdef^^e3{\~a}
-  \gdef^^e4{\"a}
-  \gdef^^e5{\ringaccent a}
-  \gdef^^e6{\ae}
-  \gdef^^e7{\cedilla c}
-  \gdef^^e8{\`e}
-  \gdef^^e9{\'e}
-  \gdef^^ea{\^e}
-  \gdef^^eb{\"e}
-  \gdef^^ec{\`{\dotless i}}
-  \gdef^^ed{\'{\dotless i}}
-  \gdef^^ee{\^{\dotless i}}
-  \gdef^^ef{\"{\dotless i}}
-  %
-  \gdef^^f0{\dh}
-  \gdef^^f1{\~n}
-  \gdef^^f2{\`o}
-  \gdef^^f3{\'o}
-  \gdef^^f4{\^o}
-  \gdef^^f5{\~o}
-  \gdef^^f6{\"o}
-  \gdef^^f7{$\div$}
-  \gdef^^f8{\o}
-  \gdef^^f9{\`u}
-  \gdef^^fa{\'u}
-  \gdef^^fb{\^u}
-  \gdef^^fc{\"u}
-  \gdef^^fd{\'y}
-  \gdef^^fe{\th}
-  \gdef^^ff{\"y}
+  \gdefchar^^a0{\tie}
+  \gdefchar^^a1{\exclamdown}
+  \gdefchar^^a2{{\tcfont \char162}} % cent
+  \gdefchar^^a3{\pounds}
+  \gdefchar^^a4{{\tcfont \char164}} % currency
+  \gdefchar^^a5{{\tcfont \char165}} % yen
+  \gdefchar^^a6{{\tcfont \char166}} % broken bar
+  \gdefchar^^a7{\S}
+  \gdefchar^^a8{\"{}}
+  \gdefchar^^a9{\copyright}
+  \gdefchar^^aa{\ordf}
+  \gdefchar^^ab{\guillemetleft}
+  \gdefchar^^ac{\ensuremath\lnot}
+  \gdefchar^^ad{\-}
+  \gdefchar^^ae{\registeredsymbol}
+  \gdefchar^^af{\={}}
+  %
+  \gdefchar^^b0{\textdegree}
+  \gdefchar^^b1{$\pm$}
+  \gdefchar^^b2{$^2$}
+  \gdefchar^^b3{$^3$}
+  \gdefchar^^b4{\'{}}
+  \gdefchar^^b5{$\mu$}
+  \gdefchar^^b6{\P}
+  \gdefchar^^b7{\ensuremath\cdot}
+  \gdefchar^^b8{\cedilla\ }
+  \gdefchar^^b9{$^1$}
+  \gdefchar^^ba{\ordm}
+  \gdefchar^^bb{\guillemetright}
+  \gdefchar^^bc{$1\over4$}
+  \gdefchar^^bd{$1\over2$}
+  \gdefchar^^be{$3\over4$}
+  \gdefchar^^bf{\questiondown}
+  %
+  \gdefchar^^c0{\`A}
+  \gdefchar^^c1{\'A}
+  \gdefchar^^c2{\^A}
+  \gdefchar^^c3{\~A}
+  \gdefchar^^c4{\"A}
+  \gdefchar^^c5{\ringaccent A}
+  \gdefchar^^c6{\AE}
+  \gdefchar^^c7{\cedilla C}
+  \gdefchar^^c8{\`E}
+  \gdefchar^^c9{\'E}
+  \gdefchar^^ca{\^E}
+  \gdefchar^^cb{\"E}
+  \gdefchar^^cc{\`I}
+  \gdefchar^^cd{\'I}
+  \gdefchar^^ce{\^I}
+  \gdefchar^^cf{\"I}
+  %
+  \gdefchar^^d0{\DH}
+  \gdefchar^^d1{\~N}
+  \gdefchar^^d2{\`O}
+  \gdefchar^^d3{\'O}
+  \gdefchar^^d4{\^O}
+  \gdefchar^^d5{\~O}
+  \gdefchar^^d6{\"O}
+  \gdefchar^^d7{$\times$}
+  \gdefchar^^d8{\O}
+  \gdefchar^^d9{\`U}
+  \gdefchar^^da{\'U}
+  \gdefchar^^db{\^U}
+  \gdefchar^^dc{\"U}
+  \gdefchar^^dd{\'Y}
+  \gdefchar^^de{\TH}
+  \gdefchar^^df{\ss}
+  %
+  \gdefchar^^e0{\`a}
+  \gdefchar^^e1{\'a}
+  \gdefchar^^e2{\^a}
+  \gdefchar^^e3{\~a}
+  \gdefchar^^e4{\"a}
+  \gdefchar^^e5{\ringaccent a}
+  \gdefchar^^e6{\ae}
+  \gdefchar^^e7{\cedilla c}
+  \gdefchar^^e8{\`e}
+  \gdefchar^^e9{\'e}
+  \gdefchar^^ea{\^e}
+  \gdefchar^^eb{\"e}
+  \gdefchar^^ec{\`{\dotless i}}
+  \gdefchar^^ed{\'{\dotless i}}
+  \gdefchar^^ee{\^{\dotless i}}
+  \gdefchar^^ef{\"{\dotless i}}
+  %
+  \gdefchar^^f0{\dh}
+  \gdefchar^^f1{\~n}
+  \gdefchar^^f2{\`o}
+  \gdefchar^^f3{\'o}
+  \gdefchar^^f4{\^o}
+  \gdefchar^^f5{\~o}
+  \gdefchar^^f6{\"o}
+  \gdefchar^^f7{$\div$}
+  \gdefchar^^f8{\o}
+  \gdefchar^^f9{\`u}
+  \gdefchar^^fa{\'u}
+  \gdefchar^^fb{\^u}
+  \gdefchar^^fc{\"u}
+  \gdefchar^^fd{\'y}
+  \gdefchar^^fe{\th}
+  \gdefchar^^ff{\"y}
 }
 
 % Latin9 (ISO-8859-15) encoding character definitions.
@@ -9105,119 +10047,119 @@ directory should work if nowhere else does.}
   % Encoding is almost identical to Latin1.
   \latonechardefs
   %
-  \gdef^^a4{\euro}
-  \gdef^^a6{\v S}
-  \gdef^^a8{\v s}
-  \gdef^^b4{\v Z}
-  \gdef^^b8{\v z}
-  \gdef^^bc{\OE}
-  \gdef^^bd{\oe}
-  \gdef^^be{\"Y}
+  \gdefchar^^a4{\euro}
+  \gdefchar^^a6{\v S}
+  \gdefchar^^a8{\v s}
+  \gdefchar^^b4{\v Z}
+  \gdefchar^^b8{\v z}
+  \gdefchar^^bc{\OE}
+  \gdefchar^^bd{\oe}
+  \gdefchar^^be{\"Y}
 }
 
 % Latin2 (ISO-8859-2) character definitions.
 \def\lattwochardefs{%
-  \gdef^^a0{\tie}
-  \gdef^^a1{\ogonek{A}}
-  \gdef^^a2{\u{}}
-  \gdef^^a3{\L}
-  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
-  \gdef^^a5{\v L}
-  \gdef^^a6{\'S}
-  \gdef^^a7{\S}
-  \gdef^^a8{\"{}}
-  \gdef^^a9{\v S}
-  \gdef^^aa{\cedilla S}
-  \gdef^^ab{\v T}
-  \gdef^^ac{\'Z}
-  \gdef^^ad{\-}
-  \gdef^^ae{\v Z}
-  \gdef^^af{\dotaccent Z}
-  %
-  \gdef^^b0{\textdegree}
-  \gdef^^b1{\ogonek{a}}
-  \gdef^^b2{\ogonek{ }}
-  \gdef^^b3{\l}
-  \gdef^^b4{\'{}}
-  \gdef^^b5{\v l}
-  \gdef^^b6{\'s}
-  \gdef^^b7{\v{}}
-  \gdef^^b8{\cedilla\ }
-  \gdef^^b9{\v s}
-  \gdef^^ba{\cedilla s}
-  \gdef^^bb{\v t}
-  \gdef^^bc{\'z}
-  \gdef^^bd{\H{}}
-  \gdef^^be{\v z}
-  \gdef^^bf{\dotaccent z}
-  %
-  \gdef^^c0{\'R}
-  \gdef^^c1{\'A}
-  \gdef^^c2{\^A}
-  \gdef^^c3{\u A}
-  \gdef^^c4{\"A}
-  \gdef^^c5{\'L}
-  \gdef^^c6{\'C}
-  \gdef^^c7{\cedilla C}
-  \gdef^^c8{\v C}
-  \gdef^^c9{\'E}
-  \gdef^^ca{\ogonek{E}}
-  \gdef^^cb{\"E}
-  \gdef^^cc{\v E}
-  \gdef^^cd{\'I}
-  \gdef^^ce{\^I}
-  \gdef^^cf{\v D}
-  %
-  \gdef^^d0{\DH}
-  \gdef^^d1{\'N}
-  \gdef^^d2{\v N}
-  \gdef^^d3{\'O}
-  \gdef^^d4{\^O}
-  \gdef^^d5{\H O}
-  \gdef^^d6{\"O}
-  \gdef^^d7{$\times$}
-  \gdef^^d8{\v R}
-  \gdef^^d9{\ringaccent U}
-  \gdef^^da{\'U}
-  \gdef^^db{\H U}
-  \gdef^^dc{\"U}
-  \gdef^^dd{\'Y}
-  \gdef^^de{\cedilla T}
-  \gdef^^df{\ss}
-  %
-  \gdef^^e0{\'r}
-  \gdef^^e1{\'a}
-  \gdef^^e2{\^a}
-  \gdef^^e3{\u a}
-  \gdef^^e4{\"a}
-  \gdef^^e5{\'l}
-  \gdef^^e6{\'c}
-  \gdef^^e7{\cedilla c}
-  \gdef^^e8{\v c}
-  \gdef^^e9{\'e}
-  \gdef^^ea{\ogonek{e}}
-  \gdef^^eb{\"e}
-  \gdef^^ec{\v e}
-  \gdef^^ed{\'{\dotless{i}}}
-  \gdef^^ee{\^{\dotless{i}}}
-  \gdef^^ef{\v d}
-  %
-  \gdef^^f0{\dh}
-  \gdef^^f1{\'n}
-  \gdef^^f2{\v n}
-  \gdef^^f3{\'o}
-  \gdef^^f4{\^o}
-  \gdef^^f5{\H o}
-  \gdef^^f6{\"o}
-  \gdef^^f7{$\div$}
-  \gdef^^f8{\v r}
-  \gdef^^f9{\ringaccent u}
-  \gdef^^fa{\'u}
-  \gdef^^fb{\H u}
-  \gdef^^fc{\"u}
-  \gdef^^fd{\'y}
-  \gdef^^fe{\cedilla t}
-  \gdef^^ff{\dotaccent{}}
+  \gdefchar^^a0{\tie}
+  \gdefchar^^a1{\ogonek{A}}
+  \gdefchar^^a2{\u{}}
+  \gdefchar^^a3{\L}
+  \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}}
+  \gdefchar^^a5{\v L}
+  \gdefchar^^a6{\'S}
+  \gdefchar^^a7{\S}
+  \gdefchar^^a8{\"{}}
+  \gdefchar^^a9{\v S}
+  \gdefchar^^aa{\cedilla S}
+  \gdefchar^^ab{\v T}
+  \gdefchar^^ac{\'Z}
+  \gdefchar^^ad{\-}
+  \gdefchar^^ae{\v Z}
+  \gdefchar^^af{\dotaccent Z}
+  %
+  \gdefchar^^b0{\textdegree}
+  \gdefchar^^b1{\ogonek{a}}
+  \gdefchar^^b2{\ogonek{ }}
+  \gdefchar^^b3{\l}
+  \gdefchar^^b4{\'{}}
+  \gdefchar^^b5{\v l}
+  \gdefchar^^b6{\'s}
+  \gdefchar^^b7{\v{}}
+  \gdefchar^^b8{\cedilla\ }
+  \gdefchar^^b9{\v s}
+  \gdefchar^^ba{\cedilla s}
+  \gdefchar^^bb{\v t}
+  \gdefchar^^bc{\'z}
+  \gdefchar^^bd{\H{}}
+  \gdefchar^^be{\v z}
+  \gdefchar^^bf{\dotaccent z}
+  %
+  \gdefchar^^c0{\'R}
+  \gdefchar^^c1{\'A}
+  \gdefchar^^c2{\^A}
+  \gdefchar^^c3{\u A}
+  \gdefchar^^c4{\"A}
+  \gdefchar^^c5{\'L}
+  \gdefchar^^c6{\'C}
+  \gdefchar^^c7{\cedilla C}
+  \gdefchar^^c8{\v C}
+  \gdefchar^^c9{\'E}
+  \gdefchar^^ca{\ogonek{E}}
+  \gdefchar^^cb{\"E}
+  \gdefchar^^cc{\v E}
+  \gdefchar^^cd{\'I}
+  \gdefchar^^ce{\^I}
+  \gdefchar^^cf{\v D}
+  %
+  \gdefchar^^d0{\DH}
+  \gdefchar^^d1{\'N}
+  \gdefchar^^d2{\v N}
+  \gdefchar^^d3{\'O}
+  \gdefchar^^d4{\^O}
+  \gdefchar^^d5{\H O}
+  \gdefchar^^d6{\"O}
+  \gdefchar^^d7{$\times$}
+  \gdefchar^^d8{\v R}
+  \gdefchar^^d9{\ringaccent U}
+  \gdefchar^^da{\'U}
+  \gdefchar^^db{\H U}
+  \gdefchar^^dc{\"U}
+  \gdefchar^^dd{\'Y}
+  \gdefchar^^de{\cedilla T}
+  \gdefchar^^df{\ss}
+  %
+  \gdefchar^^e0{\'r}
+  \gdefchar^^e1{\'a}
+  \gdefchar^^e2{\^a}
+  \gdefchar^^e3{\u a}
+  \gdefchar^^e4{\"a}
+  \gdefchar^^e5{\'l}
+  \gdefchar^^e6{\'c}
+  \gdefchar^^e7{\cedilla c}
+  \gdefchar^^e8{\v c}
+  \gdefchar^^e9{\'e}
+  \gdefchar^^ea{\ogonek{e}}
+  \gdefchar^^eb{\"e}
+  \gdefchar^^ec{\v e}
+  \gdefchar^^ed{\'{\dotless{i}}}
+  \gdefchar^^ee{\^{\dotless{i}}}
+  \gdefchar^^ef{\v d}
+  %
+  \gdefchar^^f0{\dh}
+  \gdefchar^^f1{\'n}
+  \gdefchar^^f2{\v n}
+  \gdefchar^^f3{\'o}
+  \gdefchar^^f4{\^o}
+  \gdefchar^^f5{\H o}
+  \gdefchar^^f6{\"o}
+  \gdefchar^^f7{$\div$}
+  \gdefchar^^f8{\v r}
+  \gdefchar^^f9{\ringaccent u}
+  \gdefchar^^fa{\'u}
+  \gdefchar^^fb{\H u}
+  \gdefchar^^fc{\"u}
+  \gdefchar^^fd{\'y}
+  \gdefchar^^fe{\cedilla t}
+  \gdefchar^^ff{\dotaccent{}}
 }
 
 % UTF-8 character definitions.
@@ -9247,38 +10189,84 @@ directory should work if nowhere else does.}
   \fi
 }
 
+% Give non-ASCII bytes the active definitions for processing UTF-8 sequences
 \begingroup
   \catcode`\~13
+  \catcode`\$12
   \catcode`\"12
 
+  % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp
+  % substituting ~ and $ with a character token of that value.
   \def\UTFviiiLoop{%
     \global\catcode\countUTFx\active
     \uccode`\~\countUTFx
+    \uccode`\$\countUTFx
     \uppercase\expandafter{\UTFviiiTmp}%
     \advance\countUTFx by 1
     \ifnum\countUTFx < \countUTFy
       \expandafter\UTFviiiLoop
     \fi}
 
+  % For bytes other than the first in a UTF-8 sequence.  Not expected to
+  % be expanded except when writing to auxiliary files.
+  \countUTFx = "80
+  \countUTFy = "C2
+  \def\UTFviiiTmp{%
+    \gdef~{
+        \ifpassthroughchars $\fi}}%
+  \UTFviiiLoop
+
   \countUTFx = "C2
   \countUTFy = "E0
   \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
+    \gdef~{%
+        \ifpassthroughchars $%
+        \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}%
   \UTFviiiLoop
 
   \countUTFx = "E0
   \countUTFy = "F0
   \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
+    \gdef~{%
+        \ifpassthroughchars $%
+        \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}%
   \UTFviiiLoop
 
   \countUTFx = "F0
   \countUTFy = "F4
   \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiFourOctets\string~}}
+    \gdef~{%
+        \ifpassthroughchars $%
+        \else\expandafter\UTFviiiFourOctets\expandafter$\fi
+        }}%
   \UTFviiiLoop
 \endgroup
 
+\def\globallet{\global\let} % save some \expandafter's below
+
+% @U{xxxx} to produce U+xxxx, if we support it.
+\def\U#1{%
+  \expandafter\ifx\csname uni:#1\endcsname \relax
+    \iftxinativeunicodecapable
+      % Any Unicode characters can be used by native Unicode.
+      % However, if the font does not have the glyph, the letter will miss.
+      \begingroup
+        \uccode`\.="#1\relax
+        \uppercase{.}
+      \endgroup
+    \else
+      \errhelp = \EMsimple     
+      \errmessage{Unicode character U+#1 not supported, sorry}%
+    \fi
+  \else
+    \csname uni:#1\endcsname
+  \fi
+}
+
+% For UTF-8 byte sequence (TeX, e-TeX and pdfTeX)
+% Definition macro to replace the Unicode character
+% Definition macro that is used by @U command
+%
 \begingroup
   \catcode`\"=12
   \catcode`\<=12
@@ -9287,12 +10275,12 @@ directory should work if nowhere else does.}
   \catcode`\;=12
   \catcode`\!=12
   \catcode`\~=13
-
-  \gdef\DeclareUnicodeCharacter#1#2{%
+  \gdef\DeclareUnicodeCharacterUTFviii#1#2{%
     \countUTFz = "#1\relax
-    %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
     \begingroup
       \parseXMLCharref
+      %
+      % Access definitions of characters given UTF-8 sequences
       \def\UTFviiiTwoOctets##1##2{%
         \csname u8:##1\string ##2\endcsname}%
       \def\UTFviiiThreeOctets##1##2##3{%
@@ -9302,8 +10290,16 @@ directory should work if nowhere else does.}
       \expandafter\expandafter\expandafter\expandafter
        \expandafter\expandafter\expandafter
        \gdef\UTFviiiTmp{#2}%
+      % 
+      \expandafter\ifx\csname uni:#1\endcsname \relax \else
+       \message{Internal error, already defined: #1}%
+      \fi
+      %
+      % define an additional control sequence for this code point.
+      \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
     \endgroup}
-
+  %
+  % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp.
   \gdef\parseXMLCharref{%
     \ifnum\countUTFz < "A0\relax
       \errhelp = \EMsimple
@@ -9333,413 +10329,777 @@ directory should work if nowhere else does.}
     \uccode `#1\countUTFx
     \countUTFz = \countUTFy}
 
+  % Used to set \UTFviiiTmp to a UTF-8 byte sequence
   \gdef\parseUTFviiiB#1#2#3#4{%
     \advance\countUTFz by "#10\relax
     \uccode `#3\countUTFz
     \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
 \endgroup
 
+% For native Unicode (XeTeX and LuaTeX)
+% Definition macro that is set catcode other non global
+%
+\def\DeclareUnicodeCharacterNativeOther#1#2{%
+  \catcode"#1=\other
+}
+
+% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M
+% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)
+% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
+% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
+% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
+% 
+% Many of our renditions are less than wonderful, and all the missing
+% characters are available somewhere.  Loading the necessary fonts
+% awaits user request.  We can't truly support Unicode without
+% reimplementing everything that's been done in LaTeX for many years,
+% plus probably using luatex or xetex, and who knows what else.
+% We won't be doing that here in this simple file.  But we can try to at
+% least make most of the characters not bomb out.
+%
+\def\unicodechardefs{%
+  \DeclareUnicodeCharacter{00A0}{\tie}%
+  \DeclareUnicodeCharacter{00A1}{\exclamdown}%
+  \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent
+  \DeclareUnicodeCharacter{00A3}{\pounds}%
+  \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency
+  \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen
+  \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar
+  \DeclareUnicodeCharacter{00A7}{\S}%
+  \DeclareUnicodeCharacter{00A8}{\"{ }}%
+  \DeclareUnicodeCharacter{00A9}{\copyright}%
+  \DeclareUnicodeCharacter{00AA}{\ordf}%
+  \DeclareUnicodeCharacter{00AB}{\guillemetleft}%
+  \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}%
+  \DeclareUnicodeCharacter{00AD}{\-}%
+  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}%
+  \DeclareUnicodeCharacter{00AF}{\={ }}%
+  %
+  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}%
+  \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}%
+  \DeclareUnicodeCharacter{00B2}{$^2$}%
+  \DeclareUnicodeCharacter{00B3}{$^3$}%
+  \DeclareUnicodeCharacter{00B4}{\'{ }}%
+  \DeclareUnicodeCharacter{00B5}{$\mu$}%
+  \DeclareUnicodeCharacter{00B6}{\P}%
+  \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}%
+  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}%
+  \DeclareUnicodeCharacter{00B9}{$^1$}%
+  \DeclareUnicodeCharacter{00BA}{\ordm}%
+  \DeclareUnicodeCharacter{00BB}{\guillemetright}%
+  \DeclareUnicodeCharacter{00BC}{$1\over4$}%
+  \DeclareUnicodeCharacter{00BD}{$1\over2$}%
+  \DeclareUnicodeCharacter{00BE}{$3\over4$}%
+  \DeclareUnicodeCharacter{00BF}{\questiondown}%
+  %
+  \DeclareUnicodeCharacter{00C0}{\`A}%
+  \DeclareUnicodeCharacter{00C1}{\'A}%
+  \DeclareUnicodeCharacter{00C2}{\^A}%
+  \DeclareUnicodeCharacter{00C3}{\~A}%
+  \DeclareUnicodeCharacter{00C4}{\"A}%
+  \DeclareUnicodeCharacter{00C5}{\AA}%
+  \DeclareUnicodeCharacter{00C6}{\AE}%
+  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}%
+  \DeclareUnicodeCharacter{00C8}{\`E}%
+  \DeclareUnicodeCharacter{00C9}{\'E}%
+  \DeclareUnicodeCharacter{00CA}{\^E}%
+  \DeclareUnicodeCharacter{00CB}{\"E}%
+  \DeclareUnicodeCharacter{00CC}{\`I}%
+  \DeclareUnicodeCharacter{00CD}{\'I}%
+  \DeclareUnicodeCharacter{00CE}{\^I}%
+  \DeclareUnicodeCharacter{00CF}{\"I}%
+  %
+  \DeclareUnicodeCharacter{00D0}{\DH}%
+  \DeclareUnicodeCharacter{00D1}{\~N}%
+  \DeclareUnicodeCharacter{00D2}{\`O}%
+  \DeclareUnicodeCharacter{00D3}{\'O}%
+  \DeclareUnicodeCharacter{00D4}{\^O}%
+  \DeclareUnicodeCharacter{00D5}{\~O}%
+  \DeclareUnicodeCharacter{00D6}{\"O}%
+  \DeclareUnicodeCharacter{00D7}{\ensuremath\times}%
+  \DeclareUnicodeCharacter{00D8}{\O}%
+  \DeclareUnicodeCharacter{00D9}{\`U}%
+  \DeclareUnicodeCharacter{00DA}{\'U}%
+  \DeclareUnicodeCharacter{00DB}{\^U}%
+  \DeclareUnicodeCharacter{00DC}{\"U}%
+  \DeclareUnicodeCharacter{00DD}{\'Y}%
+  \DeclareUnicodeCharacter{00DE}{\TH}%
+  \DeclareUnicodeCharacter{00DF}{\ss}%
+  %
+  \DeclareUnicodeCharacter{00E0}{\`a}%
+  \DeclareUnicodeCharacter{00E1}{\'a}%
+  \DeclareUnicodeCharacter{00E2}{\^a}%
+  \DeclareUnicodeCharacter{00E3}{\~a}%
+  \DeclareUnicodeCharacter{00E4}{\"a}%
+  \DeclareUnicodeCharacter{00E5}{\aa}%
+  \DeclareUnicodeCharacter{00E6}{\ae}%
+  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}%
+  \DeclareUnicodeCharacter{00E8}{\`e}%
+  \DeclareUnicodeCharacter{00E9}{\'e}%
+  \DeclareUnicodeCharacter{00EA}{\^e}%
+  \DeclareUnicodeCharacter{00EB}{\"e}%
+  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}%
+  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}%
+  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}%
+  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}%
+  %
+  \DeclareUnicodeCharacter{00F0}{\dh}%
+  \DeclareUnicodeCharacter{00F1}{\~n}%
+  \DeclareUnicodeCharacter{00F2}{\`o}%
+  \DeclareUnicodeCharacter{00F3}{\'o}%
+  \DeclareUnicodeCharacter{00F4}{\^o}%
+  \DeclareUnicodeCharacter{00F5}{\~o}%
+  \DeclareUnicodeCharacter{00F6}{\"o}%
+  \DeclareUnicodeCharacter{00F7}{\ensuremath\div}%
+  \DeclareUnicodeCharacter{00F8}{\o}%
+  \DeclareUnicodeCharacter{00F9}{\`u}%
+  \DeclareUnicodeCharacter{00FA}{\'u}%
+  \DeclareUnicodeCharacter{00FB}{\^u}%
+  \DeclareUnicodeCharacter{00FC}{\"u}%
+  \DeclareUnicodeCharacter{00FD}{\'y}%
+  \DeclareUnicodeCharacter{00FE}{\th}%
+  \DeclareUnicodeCharacter{00FF}{\"y}%
+  %
+  \DeclareUnicodeCharacter{0100}{\=A}%
+  \DeclareUnicodeCharacter{0101}{\=a}%
+  \DeclareUnicodeCharacter{0102}{\u{A}}%
+  \DeclareUnicodeCharacter{0103}{\u{a}}%
+  \DeclareUnicodeCharacter{0104}{\ogonek{A}}%
+  \DeclareUnicodeCharacter{0105}{\ogonek{a}}%
+  \DeclareUnicodeCharacter{0106}{\'C}%
+  \DeclareUnicodeCharacter{0107}{\'c}%
+  \DeclareUnicodeCharacter{0108}{\^C}%
+  \DeclareUnicodeCharacter{0109}{\^c}%
+  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}%
+  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}%
+  \DeclareUnicodeCharacter{010C}{\v{C}}%
+  \DeclareUnicodeCharacter{010D}{\v{c}}%
+  \DeclareUnicodeCharacter{010E}{\v{D}}%
+  \DeclareUnicodeCharacter{010F}{d'}%
+  %
+  \DeclareUnicodeCharacter{0110}{\DH}%
+  \DeclareUnicodeCharacter{0111}{\dh}%
+  \DeclareUnicodeCharacter{0112}{\=E}%
+  \DeclareUnicodeCharacter{0113}{\=e}%
+  \DeclareUnicodeCharacter{0114}{\u{E}}%
+  \DeclareUnicodeCharacter{0115}{\u{e}}%
+  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}%
+  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}%
+  \DeclareUnicodeCharacter{0118}{\ogonek{E}}%
+  \DeclareUnicodeCharacter{0119}{\ogonek{e}}%
+  \DeclareUnicodeCharacter{011A}{\v{E}}%
+  \DeclareUnicodeCharacter{011B}{\v{e}}%
+  \DeclareUnicodeCharacter{011C}{\^G}%
+  \DeclareUnicodeCharacter{011D}{\^g}%
+  \DeclareUnicodeCharacter{011E}{\u{G}}%
+  \DeclareUnicodeCharacter{011F}{\u{g}}%
+  %
+  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}%
+  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}%
+  \DeclareUnicodeCharacter{0122}{\cedilla{G}}%
+  \DeclareUnicodeCharacter{0123}{\cedilla{g}}%
+  \DeclareUnicodeCharacter{0124}{\^H}%
+  \DeclareUnicodeCharacter{0125}{\^h}%
+  \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}%
+  \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}%
+  \DeclareUnicodeCharacter{0128}{\~I}%
+  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}%
+  \DeclareUnicodeCharacter{012A}{\=I}%
+  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}%
+  \DeclareUnicodeCharacter{012C}{\u{I}}%
+  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}%
+  \DeclareUnicodeCharacter{012E}{\ogonek{I}}%
+  \DeclareUnicodeCharacter{012F}{\ogonek{i}}%
+  %
+  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}%
+  \DeclareUnicodeCharacter{0131}{\dotless{i}}%
+  \DeclareUnicodeCharacter{0132}{IJ}%
+  \DeclareUnicodeCharacter{0133}{ij}%
+  \DeclareUnicodeCharacter{0134}{\^J}%
+  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}%
+  \DeclareUnicodeCharacter{0136}{\cedilla{K}}%
+  \DeclareUnicodeCharacter{0137}{\cedilla{k}}%
+  \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}%
+  \DeclareUnicodeCharacter{0139}{\'L}%
+  \DeclareUnicodeCharacter{013A}{\'l}%
+  \DeclareUnicodeCharacter{013B}{\cedilla{L}}%
+  \DeclareUnicodeCharacter{013C}{\cedilla{l}}%
+  \DeclareUnicodeCharacter{013D}{L'}% should kern
+  \DeclareUnicodeCharacter{013E}{l'}% should kern
+  \DeclareUnicodeCharacter{013F}{L\U{00B7}}%
+  %
+  \DeclareUnicodeCharacter{0140}{l\U{00B7}}%
+  \DeclareUnicodeCharacter{0141}{\L}%
+  \DeclareUnicodeCharacter{0142}{\l}%
+  \DeclareUnicodeCharacter{0143}{\'N}%
+  \DeclareUnicodeCharacter{0144}{\'n}%
+  \DeclareUnicodeCharacter{0145}{\cedilla{N}}%
+  \DeclareUnicodeCharacter{0146}{\cedilla{n}}%
+  \DeclareUnicodeCharacter{0147}{\v{N}}%
+  \DeclareUnicodeCharacter{0148}{\v{n}}%
+  \DeclareUnicodeCharacter{0149}{'n}%
+  \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}%
+  \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}%
+  \DeclareUnicodeCharacter{014C}{\=O}%
+  \DeclareUnicodeCharacter{014D}{\=o}%
+  \DeclareUnicodeCharacter{014E}{\u{O}}%
+  \DeclareUnicodeCharacter{014F}{\u{o}}%
+  %
+  \DeclareUnicodeCharacter{0150}{\H{O}}%
+  \DeclareUnicodeCharacter{0151}{\H{o}}%
+  \DeclareUnicodeCharacter{0152}{\OE}%
+  \DeclareUnicodeCharacter{0153}{\oe}%
+  \DeclareUnicodeCharacter{0154}{\'R}%
+  \DeclareUnicodeCharacter{0155}{\'r}%
+  \DeclareUnicodeCharacter{0156}{\cedilla{R}}%
+  \DeclareUnicodeCharacter{0157}{\cedilla{r}}%
+  \DeclareUnicodeCharacter{0158}{\v{R}}%
+  \DeclareUnicodeCharacter{0159}{\v{r}}%
+  \DeclareUnicodeCharacter{015A}{\'S}%
+  \DeclareUnicodeCharacter{015B}{\'s}%
+  \DeclareUnicodeCharacter{015C}{\^S}%
+  \DeclareUnicodeCharacter{015D}{\^s}%
+  \DeclareUnicodeCharacter{015E}{\cedilla{S}}%
+  \DeclareUnicodeCharacter{015F}{\cedilla{s}}%
+  %
+  \DeclareUnicodeCharacter{0160}{\v{S}}%
+  \DeclareUnicodeCharacter{0161}{\v{s}}%
+  \DeclareUnicodeCharacter{0162}{\cedilla{T}}%
+  \DeclareUnicodeCharacter{0163}{\cedilla{t}}%
+  \DeclareUnicodeCharacter{0164}{\v{T}}%
+  \DeclareUnicodeCharacter{0165}{\v{t}}%
+  \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}%
+  \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}%
+  \DeclareUnicodeCharacter{0168}{\~U}%
+  \DeclareUnicodeCharacter{0169}{\~u}%
+  \DeclareUnicodeCharacter{016A}{\=U}%
+  \DeclareUnicodeCharacter{016B}{\=u}%
+  \DeclareUnicodeCharacter{016C}{\u{U}}%
+  \DeclareUnicodeCharacter{016D}{\u{u}}%
+  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}%
+  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}%
+  %
+  \DeclareUnicodeCharacter{0170}{\H{U}}%
+  \DeclareUnicodeCharacter{0171}{\H{u}}%
+  \DeclareUnicodeCharacter{0172}{\ogonek{U}}%
+  \DeclareUnicodeCharacter{0173}{\ogonek{u}}%
+  \DeclareUnicodeCharacter{0174}{\^W}%
+  \DeclareUnicodeCharacter{0175}{\^w}%
+  \DeclareUnicodeCharacter{0176}{\^Y}%
+  \DeclareUnicodeCharacter{0177}{\^y}%
+  \DeclareUnicodeCharacter{0178}{\"Y}%
+  \DeclareUnicodeCharacter{0179}{\'Z}%
+  \DeclareUnicodeCharacter{017A}{\'z}%
+  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}%
+  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}%
+  \DeclareUnicodeCharacter{017D}{\v{Z}}%
+  \DeclareUnicodeCharacter{017E}{\v{z}}%
+  \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}%
+  %
+  \DeclareUnicodeCharacter{01C4}{D\v{Z}}%
+  \DeclareUnicodeCharacter{01C5}{D\v{z}}%
+  \DeclareUnicodeCharacter{01C6}{d\v{z}}%
+  \DeclareUnicodeCharacter{01C7}{LJ}%
+  \DeclareUnicodeCharacter{01C8}{Lj}%
+  \DeclareUnicodeCharacter{01C9}{lj}%
+  \DeclareUnicodeCharacter{01CA}{NJ}%
+  \DeclareUnicodeCharacter{01CB}{Nj}%
+  \DeclareUnicodeCharacter{01CC}{nj}%
+  \DeclareUnicodeCharacter{01CD}{\v{A}}%
+  \DeclareUnicodeCharacter{01CE}{\v{a}}%
+  \DeclareUnicodeCharacter{01CF}{\v{I}}%
+  %
+  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}%
+  \DeclareUnicodeCharacter{01D1}{\v{O}}%
+  \DeclareUnicodeCharacter{01D2}{\v{o}}%
+  \DeclareUnicodeCharacter{01D3}{\v{U}}%
+  \DeclareUnicodeCharacter{01D4}{\v{u}}%
+  %
+  \DeclareUnicodeCharacter{01E2}{\={\AE}}%
+  \DeclareUnicodeCharacter{01E3}{\={\ae}}%
+  \DeclareUnicodeCharacter{01E6}{\v{G}}%
+  \DeclareUnicodeCharacter{01E7}{\v{g}}%
+  \DeclareUnicodeCharacter{01E8}{\v{K}}%
+  \DeclareUnicodeCharacter{01E9}{\v{k}}%
+  %
+  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}%
+  \DeclareUnicodeCharacter{01F1}{DZ}%
+  \DeclareUnicodeCharacter{01F2}{Dz}%
+  \DeclareUnicodeCharacter{01F3}{dz}%
+  \DeclareUnicodeCharacter{01F4}{\'G}%
+  \DeclareUnicodeCharacter{01F5}{\'g}%
+  \DeclareUnicodeCharacter{01F8}{\`N}%
+  \DeclareUnicodeCharacter{01F9}{\`n}%
+  \DeclareUnicodeCharacter{01FC}{\'{\AE}}%
+  \DeclareUnicodeCharacter{01FD}{\'{\ae}}%
+  \DeclareUnicodeCharacter{01FE}{\'{\O}}%
+  \DeclareUnicodeCharacter{01FF}{\'{\o}}%
+  %
+  \DeclareUnicodeCharacter{021E}{\v{H}}%
+  \DeclareUnicodeCharacter{021F}{\v{h}}%
+  %
+  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}%
+  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}%
+  \DeclareUnicodeCharacter{0228}{\cedilla{E}}%
+  \DeclareUnicodeCharacter{0229}{\cedilla{e}}%
+  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}%
+  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}%
+  %
+  \DeclareUnicodeCharacter{0232}{\=Y}%
+  \DeclareUnicodeCharacter{0233}{\=y}%
+  \DeclareUnicodeCharacter{0237}{\dotless{j}}%
+  %
+  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}%
+  %
+  % Greek letters upper case
+  \DeclareUnicodeCharacter{0391}{{\it A}}%
+  \DeclareUnicodeCharacter{0392}{{\it B}}%
+  \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}%
+  \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}%
+  \DeclareUnicodeCharacter{0395}{{\it E}}%
+  \DeclareUnicodeCharacter{0396}{{\it Z}}%
+  \DeclareUnicodeCharacter{0397}{{\it H}}%
+  \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}%
+  \DeclareUnicodeCharacter{0399}{{\it I}}%
+  \DeclareUnicodeCharacter{039A}{{\it K}}%
+  \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}%
+  \DeclareUnicodeCharacter{039C}{{\it M}}%
+  \DeclareUnicodeCharacter{039D}{{\it N}}%
+  \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}%
+  \DeclareUnicodeCharacter{039F}{{\it O}}%
+  \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}%
+  \DeclareUnicodeCharacter{03A1}{{\it P}}%
+  %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma
+  \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}%
+  \DeclareUnicodeCharacter{03A4}{{\it T}}%
+  \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}%
+  \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}%
+  \DeclareUnicodeCharacter{03A7}{{\it X}}%
+  \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}%
+  \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}%
+  %
+  % Vowels with accents
+  \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}%
+  \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}%
+  \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}%
+  \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}%
+  \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}%
+  \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}%
+  %
+  % Standalone accent
+  \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}%
+  %
+  % Greek letters lower case
+  \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}%
+  \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}%
+  \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}%
+  \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}%
+  \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}%
+  \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}%
+  \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}%
+  \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}%
+  \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}%
+  \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}%
+  \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}%
+  \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}%
+  \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}%
+  \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}%
+  \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron
+  \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}%
+  \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}%
+  \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}%
+  \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}%
+  \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}%
+  \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}%
+  \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}%
+  \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}%
+  \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}%
+  \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}%
+  %
+  % More Greek vowels with accents
+  \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}%
+  \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}%
+  \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}%
+  \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}%
+  \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}%
+  %
+  % Variant Greek letters
+  \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}%
+  \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}%
+  \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}%
+  %
+  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}%
+  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}%
+  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}%
+  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}%
+  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}%
+  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}%
+  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}%
+  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}%
+  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}%
+  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}%
+  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}%
+  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}%
+  %
+  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}%
+  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}%
+  %
+  \DeclareUnicodeCharacter{1E20}{\=G}%
+  \DeclareUnicodeCharacter{1E21}{\=g}%
+  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}%
+  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}%
+  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}%
+  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}%
+  \DeclareUnicodeCharacter{1E26}{\"H}%
+  \DeclareUnicodeCharacter{1E27}{\"h}%
+  %
+  \DeclareUnicodeCharacter{1E30}{\'K}%
+  \DeclareUnicodeCharacter{1E31}{\'k}%
+  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}%
+  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}%
+  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}%
+  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}%
+  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}%
+  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}%
+  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}%
+  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}%
+  \DeclareUnicodeCharacter{1E3E}{\'M}%
+  \DeclareUnicodeCharacter{1E3F}{\'m}%
+  %
+  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}%
+  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}%
+  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}%
+  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}%
+  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}%
+  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}%
+  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}%
+  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}%
+  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}%
+  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}%
+  %
+  \DeclareUnicodeCharacter{1E54}{\'P}%
+  \DeclareUnicodeCharacter{1E55}{\'p}%
+  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}%
+  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}%
+  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}%
+  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}%
+  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}%
+  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}%
+  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}%
+  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}%
+  %
+  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}%
+  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}%
+  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}%
+  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}%
+  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}%
+  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}%
+  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}%
+  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}%
+  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}%
+  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}%
+  %
+  \DeclareUnicodeCharacter{1E7C}{\~V}%
+  \DeclareUnicodeCharacter{1E7D}{\~v}%
+  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}%
+  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}%
+  %
+  \DeclareUnicodeCharacter{1E80}{\`W}%
+  \DeclareUnicodeCharacter{1E81}{\`w}%
+  \DeclareUnicodeCharacter{1E82}{\'W}%
+  \DeclareUnicodeCharacter{1E83}{\'w}%
+  \DeclareUnicodeCharacter{1E84}{\"W}%
+  \DeclareUnicodeCharacter{1E85}{\"w}%
+  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}%
+  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}%
+  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}%
+  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}%
+  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}%
+  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}%
+  \DeclareUnicodeCharacter{1E8C}{\"X}%
+  \DeclareUnicodeCharacter{1E8D}{\"x}%
+  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}%
+  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}%
+  %
+  \DeclareUnicodeCharacter{1E90}{\^Z}%
+  \DeclareUnicodeCharacter{1E91}{\^z}%
+  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}%
+  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}%
+  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}%
+  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}%
+  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}%
+  \DeclareUnicodeCharacter{1E97}{\"t}%
+  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}%
+  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}%
+  %
+  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}%
+  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}%
+  %
+  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}%
+  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}%
+  \DeclareUnicodeCharacter{1EBC}{\~E}%
+  \DeclareUnicodeCharacter{1EBD}{\~e}%
+  %
+  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}%
+  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}%
+  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}%
+  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}%
+  %
+  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}%
+  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}%
+  %
+  \DeclareUnicodeCharacter{1EF2}{\`Y}%
+  \DeclareUnicodeCharacter{1EF3}{\`y}%
+  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}%
+  %
+  \DeclareUnicodeCharacter{1EF8}{\~Y}%
+  \DeclareUnicodeCharacter{1EF9}{\~y}%
+  %
+  % Punctuation
+  \DeclareUnicodeCharacter{2013}{--}%
+  \DeclareUnicodeCharacter{2014}{---}%
+  \DeclareUnicodeCharacter{2018}{\quoteleft}%
+  \DeclareUnicodeCharacter{2019}{\quoteright}%
+  \DeclareUnicodeCharacter{201A}{\quotesinglbase}%
+  \DeclareUnicodeCharacter{201C}{\quotedblleft}%
+  \DeclareUnicodeCharacter{201D}{\quotedblright}%
+  \DeclareUnicodeCharacter{201E}{\quotedblbase}%
+  \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}%
+  \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}%
+  \DeclareUnicodeCharacter{2022}{\bullet}%
+  \DeclareUnicodeCharacter{202F}{\thinspace}%
+  \DeclareUnicodeCharacter{2026}{\dots}%
+  \DeclareUnicodeCharacter{2039}{\guilsinglleft}%
+  \DeclareUnicodeCharacter{203A}{\guilsinglright}%
+  %
+  \DeclareUnicodeCharacter{20AC}{\euro}%
+  %
+  \DeclareUnicodeCharacter{2192}{\expansion}%
+  \DeclareUnicodeCharacter{21D2}{\result}%
+  %
+  % Mathematical symbols
+  \DeclareUnicodeCharacter{2200}{\ensuremath\forall}%
+  \DeclareUnicodeCharacter{2203}{\ensuremath\exists}%
+  \DeclareUnicodeCharacter{2208}{\ensuremath\in}%
+  \DeclareUnicodeCharacter{2212}{\minus}%
+  \DeclareUnicodeCharacter{2217}{\ast}%
+  \DeclareUnicodeCharacter{221E}{\ensuremath\infty}%
+  \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}%
+  \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}%
+  \DeclareUnicodeCharacter{2229}{\ensuremath\cap}%
+  \DeclareUnicodeCharacter{2261}{\equiv}%
+  \DeclareUnicodeCharacter{2264}{\ensuremath\leq}%
+  \DeclareUnicodeCharacter{2265}{\ensuremath\geq}%
+  \DeclareUnicodeCharacter{2282}{\ensuremath\subset}%
+  \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}%
+  %
+  \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}%
+  \DeclareUnicodeCharacter{2032}{\ensuremath\prime}%
+  \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}%
+  \DeclareUnicodeCharacter{2111}{\ensuremath\Im}%
+  \DeclareUnicodeCharacter{2113}{\ensuremath\ell}%
+  \DeclareUnicodeCharacter{2118}{\ensuremath\wp}%
+  \DeclareUnicodeCharacter{211C}{\ensuremath\Re}%
+  \DeclareUnicodeCharacter{2127}{\ensuremath\mho}%
+  \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}%
+  \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}%
+  \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}%
+  \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}%
+  \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}%
+  \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}%
+  \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}%
+  \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}%
+  \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}%
+  \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}%
+  \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}%
+  \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}%
+  \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}%
+  \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}%
+  \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}%
+  \DeclareUnicodeCharacter{21BE}{\ensuremath\upharpoonright}%
+  \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}%
+  \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}%
+  \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}%
+  \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}%
+  \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}%
+  \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}%
+  \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}%
+  \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}%
+  \DeclareUnicodeCharacter{21DD}{\ensuremath\leadsto}%
+  \DeclareUnicodeCharacter{2201}{\ensuremath\complement}%
+  \DeclareUnicodeCharacter{2202}{\ensuremath\partial}%
+  \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}%
+  \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}%
+  \DeclareUnicodeCharacter{2209}{\ensuremath\notin}%
+  \DeclareUnicodeCharacter{220B}{\ensuremath\owns}%
+  \DeclareUnicodeCharacter{220F}{\ensuremath\prod}%
+  \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}%
+  \DeclareUnicodeCharacter{2211}{\ensuremath\sum}%
+  \DeclareUnicodeCharacter{2213}{\ensuremath\mp}%
+  \DeclareUnicodeCharacter{2218}{\ensuremath\circ}%
+  \DeclareUnicodeCharacter{221A}{\ensuremath\surd}%
+  \DeclareUnicodeCharacter{221D}{\ensuremath\propto}%
+  \DeclareUnicodeCharacter{2220}{\ensuremath\angle}%
+  \DeclareUnicodeCharacter{2223}{\ensuremath\mid}%
+  \DeclareUnicodeCharacter{2228}{\ensuremath\vee}%
+  \DeclareUnicodeCharacter{222A}{\ensuremath\cup}%
+  \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}%
+  \DeclareUnicodeCharacter{222E}{\ensuremath\oint}%
+  \DeclareUnicodeCharacter{223C}{\ensuremath\sim}%
+  \DeclareUnicodeCharacter{2240}{\ensuremath\wr}%
+  \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}%
+  \DeclareUnicodeCharacter{2245}{\ensuremath\cong}%
+  \DeclareUnicodeCharacter{2248}{\ensuremath\approx}%
+  \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}%
+  \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}%
+  \DeclareUnicodeCharacter{2260}{\ensuremath\neq}%
+  \DeclareUnicodeCharacter{226A}{\ensuremath\ll}%
+  \DeclareUnicodeCharacter{226B}{\ensuremath\gg}%
+  \DeclareUnicodeCharacter{227A}{\ensuremath\prec}%
+  \DeclareUnicodeCharacter{227B}{\ensuremath\succ}%
+  \DeclareUnicodeCharacter{2283}{\ensuremath\supset}%
+  \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}%
+  \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}%
+  \DeclareUnicodeCharacter{228F}{\ensuremath\sqsubset}%
+  \DeclareUnicodeCharacter{2290}{\ensuremath\sqsupset}%
+  \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}%
+  \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}%
+  \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}%
+  \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}%
+  \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}%
+  \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}%
+  \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}%
+  \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}%
+  \DeclareUnicodeCharacter{2299}{\ensuremath\odot}%
+  \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}%
+  \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}%
+  \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}%
+  \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}%
+  \DeclareUnicodeCharacter{22A8}{\ensuremath\models}%
+  \DeclareUnicodeCharacter{22B4}{\ensuremath\unlhd}%
+  \DeclareUnicodeCharacter{22B5}{\ensuremath\unrhd}%
+  \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}%
+  \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}%
+  \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}%
+  \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}%
+  \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}%
+  \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}%
+  \DeclareUnicodeCharacter{22C6}{\ensuremath\star}%
+  \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}%
+  \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}%
+  \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}%
+  \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}%
+  \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}%
+  \DeclareUnicodeCharacter{2322}{\ensuremath\frown}%
+  \DeclareUnicodeCharacter{2323}{\ensuremath\smile}%
+  %
+  \DeclareUnicodeCharacter{25A1}{\ensuremath\Box}%
+  \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}%
+  \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}%
+  \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}%
+  \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}%
+  \DeclareUnicodeCharacter{25C7}{\ensuremath\Diamond}%
+  \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}%
+  \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}%
+  \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}%
+  \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}%
+  \DeclareUnicodeCharacter{266D}{\ensuremath\flat}%
+  \DeclareUnicodeCharacter{266E}{\ensuremath\natural}%
+  \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}%
+  \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}%
+  \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}%
+  \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}%
+  \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}%
+  \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}%
+  \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}%
+  \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}%
+  \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}%
+  \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}%
+  \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}%
+  \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}%
+  \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}%
+  \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}%
+  \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}%
+  \DeclareUnicodeCharacter{2A1D}{\ensuremath\Join}%
+  \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}%
+  \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}%
+  \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}%
+  %
+  \global\mathchardef\checkmark="1370% actually the square root sign
+  \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}%
+}% end of \unicodechardefs
+
+% UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command)
+% It makes the setting that replace UTF-8 byte sequence.
 \def\utfeightchardefs{%
-  \DeclareUnicodeCharacter{00A0}{\tie}
-  \DeclareUnicodeCharacter{00A1}{\exclamdown}
-  \DeclareUnicodeCharacter{00A3}{\pounds}
-  \DeclareUnicodeCharacter{00A8}{\"{ }}
-  \DeclareUnicodeCharacter{00A9}{\copyright}
-  \DeclareUnicodeCharacter{00AA}{\ordf}
-  \DeclareUnicodeCharacter{00AB}{\guillemetleft}
-  \DeclareUnicodeCharacter{00AD}{\-}
-  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
-  \DeclareUnicodeCharacter{00AF}{\={ }}
-
-  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
-  \DeclareUnicodeCharacter{00B4}{\'{ }}
-  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
-  \DeclareUnicodeCharacter{00BA}{\ordm}
-  \DeclareUnicodeCharacter{00BB}{\guillemetright}
-  \DeclareUnicodeCharacter{00BF}{\questiondown}
-
-  \DeclareUnicodeCharacter{00C0}{\`A}
-  \DeclareUnicodeCharacter{00C1}{\'A}
-  \DeclareUnicodeCharacter{00C2}{\^A}
-  \DeclareUnicodeCharacter{00C3}{\~A}
-  \DeclareUnicodeCharacter{00C4}{\"A}
-  \DeclareUnicodeCharacter{00C5}{\AA}
-  \DeclareUnicodeCharacter{00C6}{\AE}
-  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
-  \DeclareUnicodeCharacter{00C8}{\`E}
-  \DeclareUnicodeCharacter{00C9}{\'E}
-  \DeclareUnicodeCharacter{00CA}{\^E}
-  \DeclareUnicodeCharacter{00CB}{\"E}
-  \DeclareUnicodeCharacter{00CC}{\`I}
-  \DeclareUnicodeCharacter{00CD}{\'I}
-  \DeclareUnicodeCharacter{00CE}{\^I}
-  \DeclareUnicodeCharacter{00CF}{\"I}
-
-  \DeclareUnicodeCharacter{00D0}{\DH}
-  \DeclareUnicodeCharacter{00D1}{\~N}
-  \DeclareUnicodeCharacter{00D2}{\`O}
-  \DeclareUnicodeCharacter{00D3}{\'O}
-  \DeclareUnicodeCharacter{00D4}{\^O}
-  \DeclareUnicodeCharacter{00D5}{\~O}
-  \DeclareUnicodeCharacter{00D6}{\"O}
-  \DeclareUnicodeCharacter{00D8}{\O}
-  \DeclareUnicodeCharacter{00D9}{\`U}
-  \DeclareUnicodeCharacter{00DA}{\'U}
-  \DeclareUnicodeCharacter{00DB}{\^U}
-  \DeclareUnicodeCharacter{00DC}{\"U}
-  \DeclareUnicodeCharacter{00DD}{\'Y}
-  \DeclareUnicodeCharacter{00DE}{\TH}
-  \DeclareUnicodeCharacter{00DF}{\ss}
-
-  \DeclareUnicodeCharacter{00E0}{\`a}
-  \DeclareUnicodeCharacter{00E1}{\'a}
-  \DeclareUnicodeCharacter{00E2}{\^a}
-  \DeclareUnicodeCharacter{00E3}{\~a}
-  \DeclareUnicodeCharacter{00E4}{\"a}
-  \DeclareUnicodeCharacter{00E5}{\aa}
-  \DeclareUnicodeCharacter{00E6}{\ae}
-  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
-  \DeclareUnicodeCharacter{00E8}{\`e}
-  \DeclareUnicodeCharacter{00E9}{\'e}
-  \DeclareUnicodeCharacter{00EA}{\^e}
-  \DeclareUnicodeCharacter{00EB}{\"e}
-  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
-  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
-  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
-  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
-
-  \DeclareUnicodeCharacter{00F0}{\dh}
-  \DeclareUnicodeCharacter{00F1}{\~n}
-  \DeclareUnicodeCharacter{00F2}{\`o}
-  \DeclareUnicodeCharacter{00F3}{\'o}
-  \DeclareUnicodeCharacter{00F4}{\^o}
-  \DeclareUnicodeCharacter{00F5}{\~o}
-  \DeclareUnicodeCharacter{00F6}{\"o}
-  \DeclareUnicodeCharacter{00F8}{\o}
-  \DeclareUnicodeCharacter{00F9}{\`u}
-  \DeclareUnicodeCharacter{00FA}{\'u}
-  \DeclareUnicodeCharacter{00FB}{\^u}
-  \DeclareUnicodeCharacter{00FC}{\"u}
-  \DeclareUnicodeCharacter{00FD}{\'y}
-  \DeclareUnicodeCharacter{00FE}{\th}
-  \DeclareUnicodeCharacter{00FF}{\"y}
-
-  \DeclareUnicodeCharacter{0100}{\=A}
-  \DeclareUnicodeCharacter{0101}{\=a}
-  \DeclareUnicodeCharacter{0102}{\u{A}}
-  \DeclareUnicodeCharacter{0103}{\u{a}}
-  \DeclareUnicodeCharacter{0104}{\ogonek{A}}
-  \DeclareUnicodeCharacter{0105}{\ogonek{a}}
-  \DeclareUnicodeCharacter{0106}{\'C}
-  \DeclareUnicodeCharacter{0107}{\'c}
-  \DeclareUnicodeCharacter{0108}{\^C}
-  \DeclareUnicodeCharacter{0109}{\^c}
-  \DeclareUnicodeCharacter{0118}{\ogonek{E}}
-  \DeclareUnicodeCharacter{0119}{\ogonek{e}}
-  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
-  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
-  \DeclareUnicodeCharacter{010C}{\v{C}}
-  \DeclareUnicodeCharacter{010D}{\v{c}}
-  \DeclareUnicodeCharacter{010E}{\v{D}}
-
-  \DeclareUnicodeCharacter{0112}{\=E}
-  \DeclareUnicodeCharacter{0113}{\=e}
-  \DeclareUnicodeCharacter{0114}{\u{E}}
-  \DeclareUnicodeCharacter{0115}{\u{e}}
-  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
-  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
-  \DeclareUnicodeCharacter{011A}{\v{E}}
-  \DeclareUnicodeCharacter{011B}{\v{e}}
-  \DeclareUnicodeCharacter{011C}{\^G}
-  \DeclareUnicodeCharacter{011D}{\^g}
-  \DeclareUnicodeCharacter{011E}{\u{G}}
-  \DeclareUnicodeCharacter{011F}{\u{g}}
-
-  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
-  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
-  \DeclareUnicodeCharacter{0124}{\^H}
-  \DeclareUnicodeCharacter{0125}{\^h}
-  \DeclareUnicodeCharacter{0128}{\~I}
-  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
-  \DeclareUnicodeCharacter{012A}{\=I}
-  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
-  \DeclareUnicodeCharacter{012C}{\u{I}}
-  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
-
-  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
-  \DeclareUnicodeCharacter{0131}{\dotless{i}}
-  \DeclareUnicodeCharacter{0132}{IJ}
-  \DeclareUnicodeCharacter{0133}{ij}
-  \DeclareUnicodeCharacter{0134}{\^J}
-  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
-  \DeclareUnicodeCharacter{0139}{\'L}
-  \DeclareUnicodeCharacter{013A}{\'l}
-
-  \DeclareUnicodeCharacter{0141}{\L}
-  \DeclareUnicodeCharacter{0142}{\l}
-  \DeclareUnicodeCharacter{0143}{\'N}
-  \DeclareUnicodeCharacter{0144}{\'n}
-  \DeclareUnicodeCharacter{0147}{\v{N}}
-  \DeclareUnicodeCharacter{0148}{\v{n}}
-  \DeclareUnicodeCharacter{014C}{\=O}
-  \DeclareUnicodeCharacter{014D}{\=o}
-  \DeclareUnicodeCharacter{014E}{\u{O}}
-  \DeclareUnicodeCharacter{014F}{\u{o}}
-
-  \DeclareUnicodeCharacter{0150}{\H{O}}
-  \DeclareUnicodeCharacter{0151}{\H{o}}
-  \DeclareUnicodeCharacter{0152}{\OE}
-  \DeclareUnicodeCharacter{0153}{\oe}
-  \DeclareUnicodeCharacter{0154}{\'R}
-  \DeclareUnicodeCharacter{0155}{\'r}
-  \DeclareUnicodeCharacter{0158}{\v{R}}
-  \DeclareUnicodeCharacter{0159}{\v{r}}
-  \DeclareUnicodeCharacter{015A}{\'S}
-  \DeclareUnicodeCharacter{015B}{\'s}
-  \DeclareUnicodeCharacter{015C}{\^S}
-  \DeclareUnicodeCharacter{015D}{\^s}
-  \DeclareUnicodeCharacter{015E}{\cedilla{S}}
-  \DeclareUnicodeCharacter{015F}{\cedilla{s}}
-
-  \DeclareUnicodeCharacter{0160}{\v{S}}
-  \DeclareUnicodeCharacter{0161}{\v{s}}
-  \DeclareUnicodeCharacter{0162}{\cedilla{t}}
-  \DeclareUnicodeCharacter{0163}{\cedilla{T}}
-  \DeclareUnicodeCharacter{0164}{\v{T}}
-
-  \DeclareUnicodeCharacter{0168}{\~U}
-  \DeclareUnicodeCharacter{0169}{\~u}
-  \DeclareUnicodeCharacter{016A}{\=U}
-  \DeclareUnicodeCharacter{016B}{\=u}
-  \DeclareUnicodeCharacter{016C}{\u{U}}
-  \DeclareUnicodeCharacter{016D}{\u{u}}
-  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
-  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
-
-  \DeclareUnicodeCharacter{0170}{\H{U}}
-  \DeclareUnicodeCharacter{0171}{\H{u}}
-  \DeclareUnicodeCharacter{0174}{\^W}
-  \DeclareUnicodeCharacter{0175}{\^w}
-  \DeclareUnicodeCharacter{0176}{\^Y}
-  \DeclareUnicodeCharacter{0177}{\^y}
-  \DeclareUnicodeCharacter{0178}{\"Y}
-  \DeclareUnicodeCharacter{0179}{\'Z}
-  \DeclareUnicodeCharacter{017A}{\'z}
-  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
-  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
-  \DeclareUnicodeCharacter{017D}{\v{Z}}
-  \DeclareUnicodeCharacter{017E}{\v{z}}
-
-  \DeclareUnicodeCharacter{01C4}{D\v{Z}}
-  \DeclareUnicodeCharacter{01C5}{D\v{z}}
-  \DeclareUnicodeCharacter{01C6}{d\v{z}}
-  \DeclareUnicodeCharacter{01C7}{LJ}
-  \DeclareUnicodeCharacter{01C8}{Lj}
-  \DeclareUnicodeCharacter{01C9}{lj}
-  \DeclareUnicodeCharacter{01CA}{NJ}
-  \DeclareUnicodeCharacter{01CB}{Nj}
-  \DeclareUnicodeCharacter{01CC}{nj}
-  \DeclareUnicodeCharacter{01CD}{\v{A}}
-  \DeclareUnicodeCharacter{01CE}{\v{a}}
-  \DeclareUnicodeCharacter{01CF}{\v{I}}
-
-  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
-  \DeclareUnicodeCharacter{01D1}{\v{O}}
-  \DeclareUnicodeCharacter{01D2}{\v{o}}
-  \DeclareUnicodeCharacter{01D3}{\v{U}}
-  \DeclareUnicodeCharacter{01D4}{\v{u}}
-
-  \DeclareUnicodeCharacter{01E2}{\={\AE}}
-  \DeclareUnicodeCharacter{01E3}{\={\ae}}
-  \DeclareUnicodeCharacter{01E6}{\v{G}}
-  \DeclareUnicodeCharacter{01E7}{\v{g}}
-  \DeclareUnicodeCharacter{01E8}{\v{K}}
-  \DeclareUnicodeCharacter{01E9}{\v{k}}
-
-  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
-  \DeclareUnicodeCharacter{01F1}{DZ}
-  \DeclareUnicodeCharacter{01F2}{Dz}
-  \DeclareUnicodeCharacter{01F3}{dz}
-  \DeclareUnicodeCharacter{01F4}{\'G}
-  \DeclareUnicodeCharacter{01F5}{\'g}
-  \DeclareUnicodeCharacter{01F8}{\`N}
-  \DeclareUnicodeCharacter{01F9}{\`n}
-  \DeclareUnicodeCharacter{01FC}{\'{\AE}}
-  \DeclareUnicodeCharacter{01FD}{\'{\ae}}
-  \DeclareUnicodeCharacter{01FE}{\'{\O}}
-  \DeclareUnicodeCharacter{01FF}{\'{\o}}
-
-  \DeclareUnicodeCharacter{021E}{\v{H}}
-  \DeclareUnicodeCharacter{021F}{\v{h}}
-
-  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
-  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
-  \DeclareUnicodeCharacter{0228}{\cedilla{E}}
-  \DeclareUnicodeCharacter{0229}{\cedilla{e}}
-  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
-  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
-
-  \DeclareUnicodeCharacter{0232}{\=Y}
-  \DeclareUnicodeCharacter{0233}{\=y}
-  \DeclareUnicodeCharacter{0237}{\dotless{j}}
-
-  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
-
-  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
-  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
-  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
-  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
-  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
-  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
-  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
-  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
-  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
-  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
-  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
-  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
-
-  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
-  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
-
-  \DeclareUnicodeCharacter{1E20}{\=G}
-  \DeclareUnicodeCharacter{1E21}{\=g}
-  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
-  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
-  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
-  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
-  \DeclareUnicodeCharacter{1E26}{\"H}
-  \DeclareUnicodeCharacter{1E27}{\"h}
-
-  \DeclareUnicodeCharacter{1E30}{\'K}
-  \DeclareUnicodeCharacter{1E31}{\'k}
-  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
-  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
-  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
-  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
-  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
-  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
-  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
-  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
-  \DeclareUnicodeCharacter{1E3E}{\'M}
-  \DeclareUnicodeCharacter{1E3F}{\'m}
-
-  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
-  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
-  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
-  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
-  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
-  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
-  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
-  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
-  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
-  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
-
-  \DeclareUnicodeCharacter{1E54}{\'P}
-  \DeclareUnicodeCharacter{1E55}{\'p}
-  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
-  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
-  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
-  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
-  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
-  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
-  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
-  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
-
-  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
-  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
-  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
-  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
-  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
-  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
-  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
-  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
-  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
-  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
-
-  \DeclareUnicodeCharacter{1E7C}{\~V}
-  \DeclareUnicodeCharacter{1E7D}{\~v}
-  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
-  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
-
-  \DeclareUnicodeCharacter{1E80}{\`W}
-  \DeclareUnicodeCharacter{1E81}{\`w}
-  \DeclareUnicodeCharacter{1E82}{\'W}
-  \DeclareUnicodeCharacter{1E83}{\'w}
-  \DeclareUnicodeCharacter{1E84}{\"W}
-  \DeclareUnicodeCharacter{1E85}{\"w}
-  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
-  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
-  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
-  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
-  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
-  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
-  \DeclareUnicodeCharacter{1E8C}{\"X}
-  \DeclareUnicodeCharacter{1E8D}{\"x}
-  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
-  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
-
-  \DeclareUnicodeCharacter{1E90}{\^Z}
-  \DeclareUnicodeCharacter{1E91}{\^z}
-  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
-  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
-  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
-  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
-  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
-  \DeclareUnicodeCharacter{1E97}{\"t}
-  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
-  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
-
-  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
-  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
-
-  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
-  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
-  \DeclareUnicodeCharacter{1EBC}{\~E}
-  \DeclareUnicodeCharacter{1EBD}{\~e}
-
-  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
-  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
-  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
-  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
-
-  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
-  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
-
-  \DeclareUnicodeCharacter{1EF2}{\`Y}
-  \DeclareUnicodeCharacter{1EF3}{\`y}
-  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
-
-  \DeclareUnicodeCharacter{1EF8}{\~Y}
-  \DeclareUnicodeCharacter{1EF9}{\~y}
-
-  \DeclareUnicodeCharacter{2013}{--}
-  \DeclareUnicodeCharacter{2014}{---}
-  \DeclareUnicodeCharacter{2018}{\quoteleft}
-  \DeclareUnicodeCharacter{2019}{\quoteright}
-  \DeclareUnicodeCharacter{201A}{\quotesinglbase}
-  \DeclareUnicodeCharacter{201C}{\quotedblleft}
-  \DeclareUnicodeCharacter{201D}{\quotedblright}
-  \DeclareUnicodeCharacter{201E}{\quotedblbase}
-  \DeclareUnicodeCharacter{2022}{\bullet}
-  \DeclareUnicodeCharacter{2026}{\dots}
-  \DeclareUnicodeCharacter{2039}{\guilsinglleft}
-  \DeclareUnicodeCharacter{203A}{\guilsinglright}
-  \DeclareUnicodeCharacter{20AC}{\euro}
-
-  \DeclareUnicodeCharacter{2192}{\expansion}
-  \DeclareUnicodeCharacter{21D2}{\result}
-
-  \DeclareUnicodeCharacter{2212}{\minus}
-  \DeclareUnicodeCharacter{2217}{\point}
-  \DeclareUnicodeCharacter{2261}{\equiv}
-}% end of \utfeightchardefs
+  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii
+  \unicodechardefs
+}
+
+% Whether the active definitions of non-ASCII characters expand to
+% non-active tokens with the same character code.  This is used to
+% write characters literally, instead of using active definitions for
+% printing the correct glyphs.
+\newif\ifpassthroughchars
+\passthroughcharsfalse
+
+% For native Unicode (XeTeX and LuaTeX)
+% Definition macro to replace / pass-through the Unicode character
+%
+\def\DeclareUnicodeCharacterNative#1#2{%
+  \catcode"#1=\active
+  \def\dodeclareunicodecharacternative##1##2##3{%
+    \begingroup
+      \uccode`\~="##2\relax
+      \uppercase{\gdef~}{%
+        \ifpassthroughchars
+          ##1%
+        \else
+          ##3%
+        \fi
+      }
+    \endgroup
+  }
+  \begingroup
+    \uccode`\.="#1\relax
+    \uppercase{\def\UTFNativeTmp{.}}%
+    \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}%
+  \endgroup
+}
+
+% Native Unicode (XeTeX and LuaTeX) character replacing definitions
+% It makes the setting that replace the Unicode characters.
+\def\nativeunicodechardefs{%
+  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative
+  \unicodechardefs
+}
+
+% For native Unicode (XeTeX and LuaTeX).  Make the character token expand
+% to the sequences given in \unicodechardefs for printing.
+\def\DeclareUnicodeCharacterNativeAtU#1#2{%
+  \def\UTFAtUTmp{#2}
+  \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp
+}
 
+% Native Unicode (XeTeX and LuaTeX) @U command definitions
+\def\nativeunicodechardefsatu{%
+  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU
+  \unicodechardefs
+}
 
 % US-ASCII character definitions.
 \def\asciichardefs{% nothing need be done
    \relax
 }
 
+% define all the unicode characters we know about, for the sake of @U.
+\iftxinativeunicodecapable
+  \nativeunicodechardefsatu
+\else
+  \utfeightchardefs
+\fi
+
+
 % Make non-ASCII characters printable again for compatibility with
 % existing Texinfo documents that may use them, even without declaring a
 % document encoding.
@@ -9795,12 +11155,12 @@ directory should work if nowhere else does.}
   \advance\vsize by \topskip
   \outervsize = \vsize
   \advance\outervsize by 2\topandbottommargin
-  \pageheight = \vsize
+  \txipageheight = \vsize
   %
   \hsize = #2\relax
   \outerhsize = \hsize
   \advance\outerhsize by 0.5in
-  \pagewidth = \hsize
+  \txipagewidth = \hsize
   %
   \normaloffset = #4\relax
   \bindingoffset = #5\relax
@@ -9812,6 +11172,13 @@ directory should work if nowhere else does.}
     % whatever layout pdftex was dumped with.
     \pdfhorigin = 1 true in
     \pdfvorigin = 1 true in
+  \else
+    \ifx\XeTeXrevision\thisisundefined
+    \else
+      \pdfpageheight #7\relax
+      \pdfpagewidth #8\relax
+      % XeTeX does not have \pdfhorigin and \pdfvorigin.
+    \fi
   \fi
   %
   \setleading{\textleading}
@@ -9999,26 +11366,25 @@ directory should work if nowhere else does.}
 % this is not a problem.
 \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
 
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
+% Set catcodes for Texinfo file
+
+% Active characters for printing the wanted glyph.
 % Most of these we simply print from the \tt font, but for some, we can
 % use math or other variants that look better in normal text.
-
+%
 \catcode`\"=\active
 \def\activedoublequote{{\tt\char34}}
 \let"=\activedoublequote
 \catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
-\chardef\hat=`\^
-\catcode`\^=\active \def\activehat{{\tt \hat}} \let^ = \activehat
+\chardef\hatchar=`\^
+\catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat
 
 \catcode`\_=\active
 \def_{\ifusingtt\normalunderscore\_}
-\let\realunder=_
-% Subroutine for the previous macro.
 \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+\let\realunder=_
 
-\catcode`\|=\active
-\def|{{\tt\char124}}
+\catcode`\|=\active \def|{{\tt\char124}}
 
 \chardef \less=`\<
 \catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
@@ -10026,6 +11392,8 @@ directory should work if nowhere else does.}
 \catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
 \catcode`\+=\active \def+{{\tt \char 43}}
 \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+\catcode`\-=\active \let-=\normaldash
+
 
 % used for headline/footline in the output routine, in case the page
 % breaks in the middle of an @tex block.
@@ -10040,12 +11408,6 @@ directory should work if nowhere else does.}
   % in principle, all other definitions in \tex have to be undone too.
 }
 
-% If a .fmt file is being used, characters that might appear in a file
-% name cannot be active until we have parsed the command line.
-% So turn them off again, and have \everyjob (or @setfilename) turn them on.
-% \otherifyactive is called near the end of this file.
-\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
-
 % Used sometimes to turn off (effectively) the active characters even after
 % parsing them.
 \def\turnoffactive{%
@@ -10064,23 +11426,22 @@ directory should work if nowhere else does.}
 % \doublebackslash is two of them (for the pdf outlines).
 {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
 
-% In texinfo, backslash is an active character; it prints the backslash
+% In Texinfo, backslash is an active character; it prints the backslash
 % in fixed width font.
 \catcode`\\=\active  % @ for escape char from now on.
 
-% The story here is that in math mode, the \char of \backslashcurfont
-% ends up printing the roman \ from the math symbol font (because \char
-% in math mode uses the \mathcode, and plain.tex sets
-% \mathcode`\\="026E).  It seems better for @backslashchar{} to always
-% print a typewriter backslash, hence we use an explicit \mathchar,
+% Print a typewriter backslash.  For math mode, we can't simply use
+% \backslashcurfont: the story here is that in math mode, the \char
+% of \backslashcurfont ends up printing the roman \ from the math symbol
+% font (because \char in math mode uses the \mathcode, and plain.tex
+% sets \mathcode`\\="026E).  Hence we use an explicit \mathchar,
 % which is the decimal equivalent of "715c (class 7, e.g., use \fam;
 % ignored family value; char position "5C).  We can't use " for the
 % usual hex value because it has already been made active.
-@def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
-@let@backslashchar = @normalbackslash % @backslashchar{} is for user documents.
 
-% On startup, @fixbackslash assigns:
-%  @let \ = @normalbackslash
+@def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
+@let@backslashchar = @ttbackslash % @backslashchar{} is for user documents.
+
 % \rawbackslash defines an active \ to do \backslashcurfont.
 % \otherbackslash defines an active \ to be a literal `\' character with
 % catcode other.  We switch back and forth between these.
@@ -10088,51 +11449,89 @@ directory should work if nowhere else does.}
 @gdef@otherbackslash{@let\=@realbackslash}
 
 % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
-% the literal character `\'.  Also revert - to its normal character, in
-% case the active - from code has slipped in.
+% the literal character `\'.
 %
 {@catcode`- = @active
  @gdef@normalturnoffactive{%
+   @passthroughcharstrue
    @let-=@normaldash
    @let"=@normaldoublequote
    @let$=@normaldollar %$ font-lock fix
    @let+=@normalplus
    @let<=@normalless
    @let>=@normalgreater
-   @let\=@normalbackslash
    @let^=@normalcaret
    @let_=@normalunderscore
    @let|=@normalverticalbar
    @let~=@normaltilde
+   @let\=@ttbackslash
    @markupsetuplqdefault
    @markupsetuprqdefault
    @unsepspaces
  }
 }
 
-% Make _ and + \other characters, temporarily.
-% This is canceled by @fixbackslash.
-@otherifyactive
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have @fixbackslash turn them back on.
+@catcode`+=@other @catcode`@_=@other
 
+% \enablebackslashhack - allow file to begin `\input texinfo'
+%
 % If a .fmt file is being used, we don't want the `\input texinfo' to show up.
 % That is what \eatinput is for; after that, the `\' should revert to printing
 % a backslash.
-%
-@gdef@eatinput input texinfo{@fixbackslash}
-@global@let\ = @eatinput
+% If the file did not have a `\input texinfo', then it is turned off after
+% the first line; otherwise the first `\' in the file would cause an error.
+% This is used on the very last line of this file, texinfo.tex.
+% We also use @c to call @fixbackslash, in case ends of lines are hidden.
+{
+@catcode`@^=7
+@catcode`@^^M=13@gdef@enablebackslashhack{%
+  @global@let\ = @eatinput%
+  @catcode`@^^M=13%
+  @def@c{@fixbackslash@c}%
+  % Definition for the newline at the end of this file.
+  @def ^^M{@let^^M@secondlinenl}%
+  % Definition for a newline in the main Texinfo file.
+  @gdef @secondlinenl{@fixbackslash}%
+}}
+
+{@catcode`@^=7 @catcode`@^^M=13%
+@gdef@eatinput input texinfo#1^^M{@fixbackslash}}
+
+% Emergency active definition of newline, in case an active newline token
+% appears by mistake.
+{@catcode`@^=7 @catcode13=13%
+@gdef@enableemergencynewline{%
+  @gdef^^M{%
+    @par%
+    %<warning: active newline>@par%
+}}}
+
 
-% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\' in the file would cause an error. This macro tries to fix
-% that, assuming it is called before the first `\' could plausibly occur.
-% Also turn back on active characters that might appear in the input
-% file name, in case not using a pre-dumped format.
-%
 @gdef@fixbackslash{%
-  @ifx\@eatinput @let\ = @normalbackslash @fi
+  @ifx\@eatinput @let\ = @ttbackslash @fi
+  @catcode13=5 % regular end of line
+  @enableemergencynewline
+  @let@c=@texinfoc
+  % Also turn back on active characters that might appear in the input
+  % file name, in case not using a pre-dumped format.
   @catcode`+=@active
   @catcode`@_=@active
+  %
+  % If texinfo.cnf is present on the system, read it.
+  % Useful for site-wide @afourpaper, etc.  This macro, @fixbackslash, gets
+  % called at the beginning of every Texinfo file.  Not opening texinfo.cnf
+  % directly in this file, texinfo.tex, makes it possible to make a format
+  % file for Texinfo.
+  %
+  @openin 1 texinfo.cnf
+  @ifeof 1 @else @input texinfo.cnf @fi
+  @closein 1
 }
 
+
 % Say @foo, not \foo, in error messages.
 @escapechar = `@@
 
@@ -10161,7 +11560,7 @@ directory should work if nowhere else does.}
 
 @c Local variables:
 @c eval: (add-hook 'write-file-hooks 'time-stamp)
-@c page-delimiter: "^\\\\message"
+@c page-delimiter: "^\\\\message\\|emacs-page"
 @c time-stamp-start: "def\\\\texinfoversion{"
 @c time-stamp-format: "%:y-%02m-%02d.%02H"
 @c time-stamp-end: "}"
@@ -10172,3 +11571,4 @@ directory should work if nowhere else does.}
 @ignore
    arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
 @end ignore
+@enablebackslashhack
index b316214..adafaf1 100644 (file)
@@ -1,6 +1,6 @@
 /* configh.dos -- hand-massaged config.h file for MS-DOS builds         -*-C-*-
 
-Copyright (C) 1994-2014 Free Software Foundation, Inc.
+Copyright (C) 1994-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -92,19 +92,19 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #define PACKAGE_NAME "GNU make"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GNU make 4.1"
+#define PACKAGE_STRING "GNU make 4.2"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "make"
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "4.1"
+#define PACKAGE_VERSION "4.2"
 
 /* Output sync sypport */
 #define NO_OUTPUT_SYNC
 
 /* Version number of package */
-#define VERSION "4.1"
+#define VERSION "4.2"
 
 /* Build host information. */
 #define MAKE_HOST "i386-pc-msdosdjgpp"
index c587e44..ddd9441 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GNU make 4.1.
+# Generated by GNU Autoconf 2.69 for GNU make 4.2.
 #
 # Report bugs to <bug-make@gnu.org>.
 #
@@ -580,8 +580,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='GNU make'
 PACKAGE_TARNAME='make'
-PACKAGE_VERSION='4.1'
-PACKAGE_STRING='GNU make 4.1'
+PACKAGE_VERSION='4.2'
+PACKAGE_STRING='GNU make 4.2'
 PACKAGE_BUGREPORT='bug-make@gnu.org'
 PACKAGE_URL='http://www.gnu.org/software/make/'
 
@@ -666,6 +666,7 @@ GMSGFMT
 MSGFMT
 GETTEXT_MACRO_VERSION
 USE_NLS
+SED
 host_os
 host_vendor
 host_cpu
@@ -744,6 +745,7 @@ infodir
 docdir
 oldincludedir
 includedir
+runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -833,6 +835,7 @@ datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1085,6 +1088,15 @@ do
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1222,7 +1234,7 @@ fi
 for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
                datadir sysconfdir sharedstatedir localstatedir includedir \
                oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-               libdir localedir mandir
+               libdir localedir mandir runstatedir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1335,7 +1347,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures GNU make 4.1 to adapt to many kinds of systems.
+\`configure' configures GNU make 4.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1375,6 +1387,7 @@ Fine tuning of the installation directories:
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -1405,7 +1418,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GNU make 4.1:";;
+     short | recursive ) echo "Configuration of GNU make 4.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1430,7 +1443,7 @@ Optional Features:
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
   --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
   --without-libiconv-prefix     don't search for libiconv in includedir and libdir
   --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib
@@ -1525,7 +1538,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GNU make configure 4.1
+GNU make configure 4.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2051,7 +2064,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by GNU make $as_me 4.1, which was
+It was created by GNU make $as_me 4.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2441,7 +2454,7 @@ ac_config_headers="$ac_config_headers config.h"
 # We have to enable "foreign" because ChangeLog is auto-generated
 # We cannot enable -Werror because gettext 0.18.1 has invalid content
 # When we update gettext to 0.18.3 or better we can add it again.
-am__api_version='1.14'
+am__api_version='1.15'
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -2613,8 +2626,8 @@ test "$program_suffix" != NONE &&
 ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
 program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
 
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
 if test x"${MISSING+set}" != xset; then
   case $am_aux_dir in
@@ -2633,7 +2646,7 @@ else
 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\    *)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -2927,7 +2940,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='make'
- VERSION='4.1'
+ VERSION='4.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2961,8 +2974,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
 mkdir_p='$(MKDIR_P)'
 
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
 # Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AMTAR='$${TAR-tar}'
@@ -3020,6 +3033,7 @@ END
   fi
 fi
 
+
 # Checks for programs.
 DEPDIR="${am__leading_dot}deps"
 
@@ -5859,13 +5873,75 @@ fi
 
 # Enable gettext, in "external" mode.
 
-
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
-  [\\/$]* | ?:[\\/]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
 $as_echo_n "checking whether NLS is requested... " >&6; }
@@ -5882,7 +5958,7 @@ $as_echo "$USE_NLS" >&6; }
 
 
 
-      GETTEXT_MACRO_VERSION=0.18
+      GETTEXT_MACRO_VERSION=0.19
 
 
 
@@ -5890,15 +5966,14 @@ $as_echo "$USE_NLS" >&6; }
 # Prepare PATH_SEPARATOR.
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
 
 # Find out how to test for executable files. Don't use a zero-byte file,
@@ -6013,15 +6088,14 @@ fi
 # Prepare PATH_SEPARATOR.
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
 
 # Find out how to test for executable files. Don't use a zero-byte file,
@@ -6091,15 +6165,14 @@ fi
 # Prepare PATH_SEPARATOR.
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
 
 # Find out how to test for executable files. Don't use a zero-byte file,
@@ -6183,6 +6256,7 @@ fi
   prefix="$acl_save_prefix"
 
 
+
 # Check whether --with-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
@@ -6193,21 +6267,21 @@ fi
 # Prepare PATH_SEPARATOR.
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
+
 ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
-$as_echo_n "checking for ld used by GCC... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -6217,11 +6291,11 @@ $as_echo_n "checking for ld used by GCC... " >&6; }
   esac
   case $ac_prog in
     # Accept absolute paths.
-    [\\/]* | [A-Za-z]:[\\/]*)
+    [\\/]* | ?:[\\/]*)
       re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+      # Canonicalize the pathname of ld
+      ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
+      while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
         ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
       done
       test -z "$LD" && LD="$ac_prog"
@@ -6246,23 +6320,26 @@ if ${acl_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
+    IFS="$acl_save_ifs"
     test -z "$ac_dir" && ac_dir=.
     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
       acl_cv_path_LD="$ac_dir/$ac_prog"
       # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some GNU ld's only accept -v.
+      # but apparently some variants of GNU ld only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
       *GNU* | *'with BFD'*)
-        test "$with_gnu_ld" != no && break ;;
+        test "$with_gnu_ld" != no && break
+        ;;
       *)
-        test "$with_gnu_ld" != yes && break ;;
+        test "$with_gnu_ld" != yes && break
+        ;;
       esac
     fi
   done
-  IFS="$ac_save_ifs"
+  IFS="$acl_save_ifs"
 else
   acl_cv_path_LD="$LD" # Let the user override the test with a path.
 fi
@@ -6282,12 +6359,14 @@ $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if ${acl_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
 case `$LD -v 2>&1 </dev/null` in
 *GNU* | *'with BFD'*)
-  acl_cv_prog_gnu_ld=yes ;;
+  acl_cv_prog_gnu_ld=yes
+  ;;
 *)
-  acl_cv_prog_gnu_ld=no ;;
+  acl_cv_prog_gnu_ld=no
+  ;;
 esac
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
@@ -6470,7 +6549,7 @@ fi
       done
       if test -z "$already_handled"; then
         names_already_handled="$names_already_handled $name"
-                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
         eval value=\"\$HAVE_LIB$uppername\"
         if test -n "$value"; then
           if test "$value" = yes; then
@@ -6999,15 +7078,19 @@ if eval \${$gt_func_gnugettext_libc+:} false; then :
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <libintl.h>
 $gt_revision_test_code
 extern int _nl_msg_cat_cntr;
 extern int *_nl_domain_bindings;
+
 int
 main ()
 {
+
 bindtextdomain ("", "");
 return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+
   ;
   return 0;
 }
@@ -7065,14 +7148,16 @@ else
     am_cv_lib_iconv=no
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <stdlib.h>
 #include <iconv.h>
+
 int
 main ()
 {
 iconv_t cd = iconv_open("","");
-       iconv(cd,NULL,NULL,NULL,NULL);
-       iconv_close(cd);
+           iconv(cd,NULL,NULL,NULL,NULL);
+           iconv_close(cd);
   ;
   return 0;
 }
@@ -7087,14 +7172,16 @@ rm -f core conftest.err conftest.$ac_objext \
       LIBS="$LIBS $LIBICONV"
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <stdlib.h>
 #include <iconv.h>
+
 int
 main ()
 {
 iconv_t cd = iconv_open("","");
-         iconv(cd,NULL,NULL,NULL,NULL);
-         iconv_close(cd);
+             iconv(cd,NULL,NULL,NULL,NULL);
+             iconv_close(cd);
   ;
   return 0;
 }
@@ -7118,40 +7205,50 @@ if ${am_cv_func_iconv_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-            am_save_LIBS="$LIBS"
+                  am_save_LIBS="$LIBS"
       if test $am_cv_lib_iconv = yes; then
         LIBS="$LIBS $LIBICONV"
       fi
-      if test "$cross_compiling" = yes; then :
+      am_cv_func_iconv_works=no
+      for ac_iconv_const in '' 'const'; do
+        if test "$cross_compiling" = yes; then :
   case "$host_os" in
-           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
-           *)            am_cv_func_iconv_works="guessing yes" ;;
-         esac
+             aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+             *)            am_cv_func_iconv_works="guessing yes" ;;
+           esac
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 #include <iconv.h>
 #include <string.h>
-int main ()
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+
+int
+main ()
 {
+int result = 0;
   /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
      returns.  */
   {
     iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
     if (cd_utf8_to_88591 != (iconv_t)(-1))
       {
-        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
         char buf[10];
-        const char *inptr = input;
+        ICONV_CONST char *inptr = input;
         size_t inbytesleft = strlen (input);
         char *outptr = buf;
         size_t outbytesleft = sizeof (buf);
         size_t res = iconv (cd_utf8_to_88591,
-                            (char **) &inptr, &inbytesleft,
+                            &inptr, &inbytesleft,
                             &outptr, &outbytesleft);
         if (res == 0)
-          return 1;
+          result |= 1;
+        iconv_close (cd_utf8_to_88591);
       }
   }
   /* Test against Solaris 10 bug: Failures are not distinguishable from
@@ -7160,17 +7257,37 @@ int main ()
     iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
     if (cd_ascii_to_88591 != (iconv_t)(-1))
       {
-        static const char input[] = "\263";
+        static ICONV_CONST char input[] = "\263";
         char buf[10];
-        const char *inptr = input;
+        ICONV_CONST char *inptr = input;
         size_t inbytesleft = strlen (input);
         char *outptr = buf;
         size_t outbytesleft = sizeof (buf);
         size_t res = iconv (cd_ascii_to_88591,
-                            (char **) &inptr, &inbytesleft,
+                            &inptr, &inbytesleft,
                             &outptr, &outbytesleft);
         if (res == 0)
-          return 1;
+          result |= 2;
+        iconv_close (cd_ascii_to_88591);
+      }
+  }
+  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304";
+        static char buf[2] = { (char)0xDE, (char)0xAD };
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = 1;
+        char *outptr = buf;
+        size_t outbytesleft = 1;
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+          result |= 4;
+        iconv_close (cd_88591_to_utf8);
       }
   }
 #if 0 /* This bug could be worked around by the caller.  */
@@ -7179,17 +7296,18 @@ int main ()
     iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
     if (cd_88591_to_utf8 != (iconv_t)(-1))
       {
-        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
         char buf[50];
-        const char *inptr = input;
+        ICONV_CONST char *inptr = input;
         size_t inbytesleft = strlen (input);
         char *outptr = buf;
         size_t outbytesleft = sizeof (buf);
         size_t res = iconv (cd_88591_to_utf8,
-                            (char **) &inptr, &inbytesleft,
+                            &inptr, &inbytesleft,
                             &outptr, &outbytesleft);
         if ((int)res > 0)
-          return 1;
+          result |= 8;
+        iconv_close (cd_88591_to_utf8);
       }
   }
 #endif
@@ -7203,19 +7321,22 @@ int main ()
       && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
       /* Try HP-UX names.  */
       && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
-    return 1;
+    result |= 16;
+  return result;
+
+  ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
   am_cv_func_iconv_works=yes
-else
-  am_cv_func_iconv_works=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
+        test "$am_cv_func_iconv_works" = no || break
+      done
       LIBS="$am_save_LIBS"
 
 fi
@@ -7321,7 +7442,7 @@ fi
       done
       if test -z "$already_handled"; then
         names_already_handled="$names_already_handled $name"
-                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
         eval value=\"\$HAVE_LIB$uppername\"
         if test -n "$value"; then
           if test "$value" = yes; then
@@ -7719,6 +7840,7 @@ else
             LIBS="$LIBS $LIBINTL"
                         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <libintl.h>
 $gt_revision_test_code
 extern int _nl_msg_cat_cntr;
@@ -7727,11 +7849,14 @@ extern
 "C"
 #endif
 const char *_nl_expand_alias (const char *);
+
 int
 main ()
 {
+
 bindtextdomain ("", "");
 return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+
   ;
   return 0;
 }
@@ -7747,6 +7872,7 @@ rm -f core conftest.err conftest.$ac_objext \
               LIBS="$LIBS $LIBICONV"
               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <libintl.h>
 $gt_revision_test_code
 extern int _nl_msg_cat_cntr;
@@ -7755,19 +7881,22 @@ extern
 "C"
 #endif
 const char *_nl_expand_alias (const char *);
+
 int
 main ()
 {
+
 bindtextdomain ("", "");
 return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   LIBINTL="$LIBINTL $LIBICONV"
-                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
-                eval "$gt_func_gnugettext_libintl=yes"
+                 LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                 eval "$gt_func_gnugettext_libintl=yes"
 
 fi
 rm -f core conftest.err conftest.$ac_objext \
@@ -8497,7 +8626,8 @@ $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
 fi
 
 for ac_header in stdlib.h locale.h unistd.h limits.h fcntl.h string.h \
-                  memory.h sys/param.h sys/resource.h sys/time.h sys/timeb.h
+                  memory.h sys/param.h sys/resource.h sys/time.h sys/timeb.h \
+                  sys/select.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -8667,28 +8797,116 @@ _ACEOF
 
 fi
 
+ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+if test "x$ac_cv_type_off_t" = xyes; then :
 
-# Find some definition for uintmax_t
+else
 
-ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default"
-if test "x$ac_cv_type_uintmax_t" = xyes; then :
+cat >>confdefs.h <<_ACEOF
+#define off_t long int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
 
 else
-   uintmax_t="unsigned long"
-  ac_fn_c_check_type "$LINENO" "unsigned long long" "ac_cv_type_unsigned_long_long" "$ac_includes_default"
-if test "x$ac_cv_type_unsigned_long_long" = xyes; then :
-  uintmax_t="unsigned long long"
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
 fi
 
+ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
+if test "x$ac_cv_type_ssize_t" = xyes; then :
+
+else
 
 cat >>confdefs.h <<_ACEOF
-#define uintmax_t $uintmax_t
+#define ssize_t int
+_ACEOF
+
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
+$as_echo_n "checking for unsigned long long int... " >&6; }
+if ${ac_cv_type_unsigned_long_long_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_unsigned_long_long_int=yes
+     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
 _ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  ac_cv_type_unsigned_long_long_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
+$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+
+$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+
+
+  ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default"
+if test "x$ac_cv_type_uintmax_t" = xyes; then :
+
+$as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h
+
+else
+  test $ac_cv_type_unsigned_long_long_int = yes \
+       && ac_type='unsigned long long int' \
+       || ac_type='unsigned long int'
 
+cat >>confdefs.h <<_ACEOF
+#define uintmax_t $ac_type
+_ACEOF
 
 fi
 
 
+
 # Find out whether our struct stat returns nanosecond resolution timestamps.
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nanoseconds field of struct stat" >&5
@@ -8936,7 +9154,7 @@ for ac_func in strdup strndup mkstemp mktemp fdopen fileno \
                 dup dup2 getcwd realpath sigsetmask sigaction \
                 getgroups seteuid setegid setlinebuf setreuid setregid \
                 getrlimit setrlimit setvbuf pipe strerror strsignal \
-                lstat readlink atexit isatty ttyname
+                lstat readlink atexit isatty ttyname pselect
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -8966,6 +9184,220 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+for ac_header in vfork.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
+if test "x$ac_cv_header_vfork_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VFORK_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in fork vfork
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+if test "x$ac_cv_func_fork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
+$as_echo_n "checking for working fork... " >&6; }
+if ${ac_cv_func_fork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_fork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+         /* By Ruediger Kuhlmann. */
+         return fork () < 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_fork_works=yes
+else
+  ac_cv_func_fork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
+$as_echo "$ac_cv_func_fork_works" >&6; }
+
+else
+  ac_cv_func_fork_works=$ac_cv_func_fork
+fi
+if test "x$ac_cv_func_fork_works" = xcross; then
+  case $host in
+    *-*-amigaos* | *-*-msdosdjgpp*)
+      # Override, as these systems have only a dummy fork() stub
+      ac_cv_func_fork_works=no
+      ;;
+    *)
+      ac_cv_func_fork_works=yes
+      ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
+fi
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
+$as_echo_n "checking for working vfork... " >&6; }
+if ${ac_cv_func_vfork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_vfork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Thanks to Paul Eggert for this test.  */
+$ac_includes_default
+#include <sys/wait.h>
+#ifdef HAVE_VFORK_H
+# include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+   argument registers are propagated back to the parent.  The compiler
+   is told about this with #include <vfork.h>, but some compilers
+   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
+   static variable whose address is put into a register that is
+   clobbered by the vfork.  */
+static void
+#ifdef __cplusplus
+sparc_address_test (int arg)
+# else
+sparc_address_test (arg) int arg;
+#endif
+{
+  static pid_t child;
+  if (!child) {
+    child = vfork ();
+    if (child < 0) {
+      perror ("vfork");
+      _exit(2);
+    }
+    if (!child) {
+      arg = getpid();
+      write(-1, "", 0);
+      _exit (arg);
+    }
+  }
+}
+
+int
+main ()
+{
+  pid_t parent = getpid ();
+  pid_t child;
+
+  sparc_address_test (0);
+
+  child = vfork ();
+
+  if (child == 0) {
+    /* Here is another test for sparc vfork register problems.  This
+       test uses lots of local variables, at least as many local
+       variables as main has allocated so far including compiler
+       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
+       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
+       reuse the register of parent for one of the local variables,
+       since it will think that parent can't possibly be used any more
+       in this routine.  Assigning to the local variable will thus
+       munge parent in the parent process.  */
+    pid_t
+      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+    /* Convince the compiler that p..p7 are live; otherwise, it might
+       use the same hardware register for all 8 local variables.  */
+    if (p != p1 || p != p2 || p != p3 || p != p4
+       || p != p5 || p != p6 || p != p7)
+      _exit(1);
+
+    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
+       from child file descriptors.  If the child closes a descriptor
+       before it execs or exits, this munges the parent's descriptor
+       as well.  Test for this by closing stdout in the child.  */
+    _exit(close(fileno(stdout)) != 0);
+  } else {
+    int status;
+    struct stat st;
+
+    while (wait(&status) != child)
+      ;
+    return (
+        /* Was there some problem with vforking?  */
+        child < 0
+
+        /* Did the child fail?  (This shouldn't happen.)  */
+        || status
+
+        /* Did the vfork/compiler bug occur?  */
+        || parent != getpid()
+
+        /* Did the file descriptor bug occur?  */
+        || fstat(fileno(stdout), &st) != 0
+        );
+  }
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_vfork_works=yes
+else
+  ac_cv_func_vfork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
+$as_echo "$ac_cv_func_vfork_works" >&6; }
+
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+  ac_cv_func_vfork_works=$ac_cv_func_vfork
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
+fi
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
+
+else
+
+$as_echo "#define vfork fork" >>confdefs.h
+
+fi
+if test "x$ac_cv_func_fork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
+
+fi
+
+
 if ${ac_cv_func_setvbuf_reversed+:} false; then :
   $as_echo_n "(cached) " >&6
 else
@@ -9031,17 +9463,6 @@ $as_echo "#define HAVE_STRCOLL 1" >>confdefs.h
 fi
 
 
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
-
-fi
-
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
@@ -11801,7 +12222,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GNU make $as_me 4.1, which was
+This file was extended by GNU make $as_me 4.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -11869,7 +12290,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-GNU make config.status 4.1
+GNU make config.status 4.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -12752,7 +13173,7 @@ $as_echo X"$file" |
       case "$ac_file" in */Makefile.in)
         # Adjust a relative srcdir.
         ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
-        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
         ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
         # In autoconf-2.13 it is called $ac_given_srcdir.
         # In autoconf-2.50 it is called $srcdir.
@@ -12768,7 +13189,8 @@ $as_echo X"$file" |
         if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
           rm -f "$ac_dir/POTFILES"
           test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
-          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[  ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          gt_tab=`printf '\t'`
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
           POMAKEFILEDEPS="POTFILES.in"
           # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
           # on $ac_dir but don't depend on user-specified configuration
@@ -12779,12 +13201,12 @@ $as_echo X"$file" |
               test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
             fi
             ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
-            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            # Hide the ALL_LINGUAS assignment from automake < 1.5.
             eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
             POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
           else
             # The set of available languages was given in configure.in.
-            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            # Hide the ALL_LINGUAS assignment from automake < 1.5.
             eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
           fi
           # Compute POFILES
index fab9a2d..1902823 100644 (file)
@@ -1,6 +1,6 @@
 # Process this file with autoconf to produce a configure script.
 #
-# Copyright (C) 1993-2014 Free Software Foundation, Inc.
+# Copyright (C) 1993-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
@@ -16,9 +16,9 @@
 # You should have received a copy of the GNU General Public License along with
 # this program.  If not, see <http://www.gnu.org/licenses/>.
 
-AC_INIT([GNU make],[4.1],[bug-make@gnu.org])
+AC_INIT([GNU make],[4.2],[bug-make@gnu.org])
 
-AC_PREREQ([2.62])
+AC_PREREQ([2.69])
 
 # Autoconf setup
 AC_CONFIG_AUX_DIR([config])
@@ -29,7 +29,7 @@ AC_CONFIG_HEADERS([config.h])
 # We have to enable "foreign" because ChangeLog is auto-generated
 # We cannot enable -Werror because gettext 0.18.1 has invalid content
 # When we update gettext to 0.18.3 or better we can add it again.
-AM_INIT_AUTOMAKE([1.11.1 silent-rules foreign -Wall])
+AM_INIT_AUTOMAKE([1.15 foreign -Werror -Wall])
 
 # Checks for programs.
 AC_USE_SYSTEM_EXTENSIONS
@@ -51,7 +51,7 @@ AC_ISC_POSIX
 AC_MINIX
 
 # Enable gettext, in "external" mode.
-AM_GNU_GETTEXT_VERSION([0.18.1])
+AM_GNU_GETTEXT_VERSION([0.19.4])
 AM_GNU_GETTEXT([external])
 
 # This test must come as early as possible after the compiler configuration
@@ -68,22 +68,18 @@ AC_HEADER_DIRENT
 AC_HEADER_STAT
 AC_HEADER_TIME
 AC_CHECK_HEADERS([stdlib.h locale.h unistd.h limits.h fcntl.h string.h \
-                  memory.h sys/param.h sys/resource.h sys/time.h sys/timeb.h])
+                  memory.h sys/param.h sys/resource.h sys/time.h sys/timeb.h \
+                  sys/select.h])
 
 AM_PROG_CC_C_O
 AC_C_CONST
 AC_TYPE_SIGNAL
 AC_TYPE_UID_T
 AC_TYPE_PID_T
-
-# Find some definition for uintmax_t
-
-AC_CHECK_TYPE([uintmax_t],[],
-[ uintmax_t="unsigned long"
-  AC_CHECK_TYPE([unsigned long long],[uintmax_t="unsigned long long"])
-  AC_DEFINE_UNQUOTED([uintmax_t], [$uintmax_t],
-    [Define uintmax_t if not defined in <stdint.h> or <inttypes.h>.])
-])
+AC_TYPE_OFF_T
+AC_TYPE_SIZE_T
+AC_TYPE_SSIZE_T
+AC_TYPE_UINTMAX_T
 
 # Find out whether our struct stat returns nanosecond resolution timestamps.
 
@@ -140,7 +136,7 @@ AC_CHECK_FUNCS([strdup strndup mkstemp mktemp fdopen fileno \
                 dup dup2 getcwd realpath sigsetmask sigaction \
                 getgroups seteuid setegid setlinebuf setreuid setregid \
                 getrlimit setrlimit setvbuf pipe strerror strsignal \
-                lstat readlink atexit isatty ttyname])
+                lstat readlink atexit isatty ttyname pselect])
 
 # We need to check declarations, not just existence, because on Tru64 this
 # function is not declared without special flags, which themselves cause
@@ -148,6 +144,8 @@ AC_CHECK_FUNCS([strdup strndup mkstemp mktemp fdopen fileno \
 AC_CHECK_DECLS([bsd_signal], [], [], [[#define _GNU_SOURCE 1
 #include <signal.h>]])
 
+AC_FUNC_FORK
+
 AC_FUNC_SETVBUF_REVERSED
 
 # Rumor has it that strcasecmp lives in -lresolv on some odd systems.
index e54ba84..3c41f38 100644 (file)
@@ -1,5 +1,5 @@
 @echo off\r
-rem Copyright (C) 1994-2014 Free Software Foundation, Inc.\r
+rem Copyright (C) 1994-2016 Free Software Foundation, Inc.\r
 rem This file is part of GNU Make.\r
 rem\r
 rem GNU Make is free software; you can redistribute it and/or modify it under\r
diff --git a/debug.h b/debug.h
index 9d2ec04..17c394b 100644 (file)
--- a/debug.h
+++ b/debug.h
@@ -1,5 +1,5 @@
 /* Debugging macros and interface.
-Copyright (C) 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1999-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 3b6f7ae..3d865c7 100644 (file)
--- a/default.c
+++ b/default.c
@@ -1,5 +1,5 @@
 /* Data base of default implicit rules for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -131,10 +131,47 @@ static struct pspec default_terminal_rules[] =
 static const char *default_suffix_rules[] =
   {
 #ifdef VMS
+    ".o",
+    "$(LINK.obj) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".obj",
+    "$(LINK.obj) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".s",
+    "$(LINK.s) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".S",
+    "$(LINK.S) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".c",
+    "$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".cc",
+    "$(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".C",
+    "$(LINK.C) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".cpp",
+    "$(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".f",
+    "$(LINK.f) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".m",
+    "$(LINK.m) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".p",
+    "$(LINK.p) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".F",
+    "$(LINK.F) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".r",
+    "$(LINK.r) $^ $(LOADLIBES) $(LDLIBS) -o $@",
+    ".mod",
+    "$(COMPILE.mod) -o $@ -e $@ $^",
+
+    ".def.sym",
+    "$(COMPILE.def) -o $@ $<",
+
+    ".sh",
+    "copy $< >$@",
+
     ".obj.exe",
     "$(LINK.obj) $^ $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@",
     ".mar.exe",
     "$(COMPILE.mar) $^ \n $(LINK.obj) $(subst .mar,.obj,$^) $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@",
+    ".s.o",
+    "$(COMPILE.s) -o $@ $<",
     ".s.exe",
     "$(COMPILE.s) $^ \n $(LINK.obj) $(subst .s,.obj,$^) $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@",
     ".c.exe",
@@ -205,6 +242,27 @@ static const char *default_suffix_rules[] =
     ".tex.dvi",
     "$(TEX) $<",
 
+    ".cpp.o",
+    "$(COMPILE.cpp) $(OUTPUT_OPTION) $<",
+    ".f.o",
+    "$(COMPILE.f) $(OUTPUT_OPTION) $<",
+    ".m.o",
+    "$(COMPILE.m) $(OUTPUT_OPTION) $<",
+    ".p.o",
+    "$(COMPILE.p) $(OUTPUT_OPTION) $<",
+    ".r.o",
+    "$(COMPILE.r) $(OUTPUT_OPTION) $<",
+    ".mod.o",
+    "$(COMPILE.mod) -o $@ $<",
+
+    ".c.ln",
+    "$(LINT.c) -C$* $<",
+    ".y.ln",
+    "$(YACC.y) $< \n rename y_tab.c $@",
+
+    ".l.ln",
+    "@$(RM) $*.c\n $(LEX.l) $< > $*.c\n$(LINT.c) -i $*.c -o $@\n $(RM) $*.c",
+
 #else /* ! VMS */
 
     ".o",
@@ -413,19 +471,44 @@ static const char *default_variables[] =
     "LDLIBS", "",
 #endif
 
+    "LINK.o", "$(LD) $(LDFLAGS)",
     "LINK.obj", "$(LD) $(LDFLAGS)",
 #ifndef GCC_IS_NATIVE
     "CXXLINK.obj", "$(CXXLD) $(LDFLAGS)",
     "COMPILE.cxx", "$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH)",
 #endif
     "COMPILE.c", "$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)",
+    "LINK.c", "$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)",
+    "COMPILE.m", "$(OBJC) $(OBJCFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c",
+    "LINK.m", "$(OBJC) $(OBJCFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)",
     "COMPILE.cc", "$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH)",
+    "COMPILE.C", "$(COMPILE.cc)",
+    "COMPILE.cpp", "$(COMPILE.cc)",
+    "LINK.C", "$(LINK.cc)",
+    "LINK.cpp", "$(LINK.cc)",
     "YACC.y", "$(YACC) $(YFLAGS)",
     "LEX.l", "$(LEX) $(LFLAGS)",
+    "YACC.m", "$(YACC) $(YFLAGS)",
+    "LEX.m", "$(LEX) $(LFLAGS) -t",
     "COMPILE.for", "$(FC) $(FFLAGS) $(TARGET_ARCH)",
+    "COMPILE.f", "$(FC) $(FFLAGS) $(TARGET_ARCH) -c",
+    "LINK.f", "$(FC) $(FFLAGS) $(LDFLAGS) $(TARGET_ARCH)",
+    "COMPILE.F", "$(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c",
+    "LINK.F", "$(FC) $(FFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)",
+    "COMPILE.r", "$(FC) $(FFLAGS) $(RFLAGS) $(TARGET_ARCH) -c",
+    "LINK.r", "$(FC) $(FFLAGS) $(RFLAGS) $(LDFLAGS) $(TARGET_ARCH)",
     "COMPILE.pas", "$(PC) $(PFLAGS) $(CPPFLAGS) $(TARGET_ARCH)",
+    "COMPILE.def", "$(M2C) $(M2FLAGS) $(DEFFLAGS) $(TARGET_ARCH)",
+    "COMPILE.mod", "$(M2C) $(M2FLAGS) $(MODFLAGS) $(TARGET_ARCH)",
+    "COMPILE.p", "$(PC) $(PFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c",
+    "LINK.p", "$(PC) $(PFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)",
     "COMPILE.mar", "$(MACRO) $(MACROFLAGS)",
     "COMPILE.s", "$(AS) $(ASFLAGS) $(TARGET_MACH)",
+    "LINK.S", "$(CC) $(ASFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_MACH)",
+    "COMPILE.S", "$(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_MACH) -c",
+    "PREPROCESS.S", "$(CC) -E $(CPPFLAGS)",
+    "PREPROCESS.F", "$(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -F",
+    "PREPROCESS.r", "$(FC) $(FFLAGS) $(RFLAGS) $(TARGET_ARCH) -F",
     "LINT.c", "$(LINT) $(LINTFLAGS) $(CPPFLAGS) $(TARGET_ARCH)",
 
     "MV", "rename/new_version",
@@ -519,10 +602,21 @@ static const char *default_variables[] =
     "COMPILE.m", "$(OBJC) $(OBJCFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c",
     "LINK.m", "$(OBJC) $(OBJCFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)",
     "COMPILE.cc", "$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c",
+#ifndef HAVE_CASE_INSENSITIVE_FS
+    /* On case-insensitive filesystems, treat *.C files as *.c files,
+       to avoid erroneously compiling C sources as C++, which will
+       probably fail.  */
     "COMPILE.C", "$(COMPILE.cc)",
+#else
+    "COMPILE.C", "$(COMPILE.c)",
+#endif
     "COMPILE.cpp", "$(COMPILE.cc)",
     "LINK.cc", "$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)",
+#ifndef HAVE_CASE_INSENSITIVE_FS
     "LINK.C", "$(LINK.cc)",
+#else
+    "LINK.C", "$(LINK.c)",
+#endif
     "LINK.cpp", "$(LINK.cc)",
     "YACC.y", "$(YACC) $(YFLAGS)",
     "LEX.l", "$(LEX) $(LFLAGS) -t",
diff --git a/dep.h b/dep.h
index b8c0d29..7f5076e 100644 (file)
--- a/dep.h
+++ b/dep.h
@@ -1,5 +1,5 @@
 /* Definitions of dependency data structures for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -14,9 +14,21 @@ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 You should have received a copy of the GNU General Public License along with
 this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+
+/* Structure used in chains of names, for parsing and globbing.  */
+
+#define NAMESEQ(_t)     \
+    _t *next;           \
+    const char *name
+
+struct nameseq
+  {
+    NAMESEQ (struct nameseq);
+  };
+
 /* Flag bits for the second argument to 'read_makefile'.
-   These flags are saved in the 'changed' field of each
-   'struct dep' in the chain returned by 'read_all_makefiles'.  */
+   These flags are saved in the 'flags' field of each
+   'struct goaldep' in the chain returned by 'read_all_makefiles'.  */
 
 #define RM_NO_DEFAULT_GOAL      (1 << 0) /* Do not set default goal.  */
 #define RM_INCLUDED             (1 << 1) /* Search makefile search path.  */
@@ -25,34 +37,37 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #define RM_NOFLAG               0
 
 /* Structure representing one dependency of a file.
-   Each struct file's 'deps' points to a chain of these,
-   chained through the 'next'. 'stem' is the stem for this
-   dep line of static pattern rule or NULL.
-
-   Note that the first two words of this match a struct nameseq.  */
+   Each struct file's 'deps' points to a chain of these, through 'next'.
+   'stem' is the stem for this dep line of static pattern rule or NULL.  */
+
+#define DEP(_t)                                 \
+    NAMESEQ (_t);                               \
+    struct file *file;                          \
+    const char *stem;                           \
+    unsigned short flags : 8;                   \
+    unsigned short changed : 1;                 \
+    unsigned short ignore_mtime : 1;            \
+    unsigned short staticpattern : 1;           \
+    unsigned short need_2nd_expansion : 1
 
 struct dep
   {
-    struct dep *next;
-    const char *name;
-    const char *stem;
-    struct file *file;
-    unsigned int changed : 8;
-    unsigned int ignore_mtime : 1;
-    unsigned int staticpattern : 1;
-    unsigned int need_2nd_expansion : 1;
-    unsigned int dontcare : 1;
+    DEP (struct dep);
   };
 
+/* Structure representing one goal.
+   The goals to be built constitute a chain of these, chained through 'next'.
+   'stem' is not used, but it's simpler to include and ignore it.  */
 
-/* Structure used in chains of names, for parsing and globbing.  */
-
-struct nameseq
+struct goaldep
   {
-    struct nameseq *next;
-    const char *name;
+    DEP (struct goaldep);
+    unsigned short error;
+    floc floc;
   };
 
+/* Options for parsing lists of filenames.  */
+
 #define PARSEFS_NONE    0x0000
 #define PARSEFS_NOSTRIP 0x0001
 #define PARSEFS_NOAR    0x0002
@@ -78,15 +93,39 @@ char *tilde_expand (const char *name);
 struct nameseq *ar_glob (const char *arname, const char *member_pattern, unsigned int size);
 #endif
 
-#define dep_name(d)     ((d)->name == 0 ? (d)->file->name : (d)->name)
+#define dep_name(d)        ((d)->name ? (d)->name : (d)->file->name)
+
+#define alloc_seq_elt(_t)   xcalloc (sizeof (_t))
+void free_ns_chain (struct nameseq *n);
+
+#if defined(MAKE_MAINTAINER_MODE) && defined(__GNUC__)
+/* Use inline to get real type-checking.  */
+#define SI static inline
+SI struct nameseq *alloc_ns()      { return alloc_seq_elt (struct nameseq); }
+SI struct dep *alloc_dep()         { return alloc_seq_elt (struct dep); }
+SI struct goaldep *alloc_goaldep() { return alloc_seq_elt (struct goaldep); }
+
+SI void free_ns(struct nameseq *n)      { free (n); }
+SI void free_dep(struct dep *d)         { free_ns ((struct nameseq *)d); }
+SI void free_goaldep(struct goaldep *g) { free_dep ((struct dep *)g); }
 
-#define alloc_dep()     (xcalloc (sizeof (struct dep)))
-#define free_ns(_n)     free (_n)
-#define free_dep(_d)    free_ns (_d)
+SI void free_dep_chain(struct dep *d)      { free_ns_chain((struct nameseq *)d); }
+SI void free_goal_chain(struct goaldep *g) { free_dep_chain((struct dep *)g); }
+#else
+# define alloc_ns()          alloc_seq_elt (struct nameseq)
+# define alloc_dep()         alloc_seq_elt (struct dep)
+# define alloc_goaldep()     alloc_seq_elt (struct goaldep)
+
+# define free_ns(_n)         free (_n)
+# define free_dep(_d)        free_ns (_d)
+# define free_goaldep(_g)    free_dep (_g)
+
+# define free_dep_chain(_d)  free_ns_chain ((struct nameseq *)(_d))
+# define free_goal_chain(_g) free_ns_chain ((struct nameseq *)(_g))
+#endif
 
 struct dep *copy_dep_chain (const struct dep *d);
-void free_dep_chain (struct dep *d);
-void free_ns_chain (struct nameseq *n);
-struct dep *read_all_makefiles (const char **makefiles);
-void eval_buffer (char *buffer, const gmk_floc *floc);
-enum update_status update_goal_chain (struct dep *goals);
+
+struct goaldep *read_all_makefiles (const char **makefiles);
+void eval_buffer (char *buffer, const floc *floc);
+enum update_status update_goal_chain (struct goaldep *goals);
diff --git a/dir.c b/dir.c
index 7e00b8f..63c82a0 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -1,5 +1,5 @@
 /* Directory hashing for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -142,6 +142,32 @@ downcase (const char *filename)
 
 #ifdef VMS
 
+static char *
+downcase_inplace(char *filename)
+{
+  char *name;
+  name = filename;
+  while (*name != '\0')
+    {
+      *name = tolower ((unsigned char)*name);
+      ++name;
+    }
+  return filename;
+}
+
+#ifndef _USE_STD_STAT
+/* VMS 8.2 fixed the VMS stat output to have unique st_dev and st_ino
+   when _USE_STD_STAT is used on the compile line.
+
+   Prior to _USE_STD_STAT support, the st_dev is a pointer to thread
+   static memory containing the device of the last filename looked up.
+
+   Todo: find out if the ino_t still needs to be faked on a directory.
+ */
+
+/* Define this if the older VMS_INO_T is needed */
+#define VMS_INO_T 1
+
 static int
 vms_hash (const char *name)
 {
@@ -200,6 +226,10 @@ vmsstat_dir (const char *name, struct stat *st)
 
   return 0;
 }
+
+# define stat(__path, __sbuf) vmsstat_dir (__path, __sbuf)
+
+#endif /* _USE_STD_STAT */
 #endif /* VMS */
 \f
 /* Hash table of directories.  */
@@ -218,14 +248,14 @@ struct directory_contents
      * qualified name of the directory. Beware though, this is also
      * unreliable. I'm open to suggestion on a better way to emulate inode.  */
     char *path_key;
-    int   ctime;
-    int   mtime;        /* controls check for stale directory cache */
-    int   fs_flags;     /* FS_FAT, FS_NTFS, ... */
+    time_t ctime;
+    time_t mtime;        /* controls check for stale directory cache */
+    int fs_flags;     /* FS_FAT, FS_NTFS, ... */
 # define FS_FAT      0x1
 # define FS_NTFS     0x2
 # define FS_UNKNOWN  0x4
 #else
-# ifdef VMS
+# ifdef VMS_INO_T
     ino_t ino[3];
 # else
     ino_t ino;
@@ -246,7 +276,7 @@ directory_contents_hash_1 (const void *key_0)
   ISTRING_HASH_1 (key->path_key, hash);
   hash ^= ((unsigned int) key->dev << 4) ^ (unsigned int) key->ctime;
 #else
-# ifdef VMS
+# ifdef VMS_INO_T
   hash = (((unsigned int) key->dev << 4)
           ^ ((unsigned int) key->ino[0]
              + (unsigned int) key->ino[1]
@@ -269,7 +299,7 @@ directory_contents_hash_2 (const void *key_0)
   ISTRING_HASH_2 (key->path_key, hash);
   hash ^= ((unsigned int) key->dev << 4) ^ (unsigned int) ~key->ctime;
 #else
-# ifdef VMS
+# ifdef VMS_INO_T
   hash = (((unsigned int) key->dev << 4)
           ^ ~((unsigned int) key->ino[0]
               + (unsigned int) key->ino[1]
@@ -308,7 +338,7 @@ directory_contents_hash_cmp (const void *xv, const void *yv)
   if (result)
     return result;
 #else
-# ifdef VMS
+# ifdef VMS_INO_T
   result = MAKECMP(x->ino[0], y->ino[0]);
   if (result)
     return result;
@@ -375,7 +405,7 @@ static unsigned int open_directories = 0;
 struct dirfile
   {
     const char *name;           /* Name of the file.  */
-    short length;
+    size_t length;
     short impossible;           /* This file is impossible.  */
   };
 
@@ -419,13 +449,6 @@ find_directory (const char *name)
   struct directory **dir_slot;
   struct directory dir_key;
 
-#ifdef VMS
-  if ((*name == '.') && (*(name+1) == 0))
-    name = "[]";
-  else
-    name = vmsify (name,1);
-#endif
-
   dir_key.name = name;
   dir_slot = (struct directory **) hash_find_slot (&directories, &dir_key);
   dir = *dir_slot;
@@ -439,7 +462,12 @@ find_directory (const char *name)
 
       dir = xmalloc (sizeof (struct directory));
 #if defined(HAVE_CASE_INSENSITIVE_FS) && defined(VMS)
-      dir->name = strcache_add_len (downcase (name), p - name);
+      /* Todo: Why is this only needed on VMS? */
+      {
+        char *lname = downcase_inplace (xstrdup (name));
+        dir->name = strcache_add_len (lname, p - name);
+        free (lname);
+      }
 #else
       dir->name = strcache_add_len (name, p - name);
 #endif
@@ -447,9 +475,7 @@ find_directory (const char *name)
       /* The directory is not in the name hash table.
          Find its device and inode numbers, and look it up by them.  */
 
-#ifdef VMS
-      r = vmsstat_dir (name, &st);
-#elif defined(WINDOWS32)
+#if defined(WINDOWS32)
       {
         char tem[MAXPATHLEN], *tstart, *tend;
 
@@ -492,7 +518,7 @@ find_directory (const char *name)
           dc_key.path_key = w32_path = w32ify (name, 1);
           dc_key.ctime = st.st_ctime;
 #else
-# ifdef VMS
+# ifdef VMS_INO_T
           dc_key.ino[0] = st.st_ino[0];
           dc_key.ino[1] = st.st_ino[1];
           dc_key.ino[2] = st.st_ino[2];
@@ -537,7 +563,7 @@ find_directory (const char *name)
               else
                 dc->fs_flags = FS_UNKNOWN;
 #else
-# ifdef VMS
+# ifdef VMS_INO_T
               dc->ino[0] = st.st_ino[0];
               dc->ino[1] = st.st_ino[1];
               dc->ino[2] = st.st_ino[2];
@@ -602,11 +628,6 @@ dir_contents_file_exists_p (struct directory_contents *dir,
   if (filename != 0)
     _fnlwr (filename); /* lower case for FAT drives */
 #endif
-
-#ifdef VMS
-  filename = vmsify (filename,0);
-#endif
-
   if (filename != 0)
     {
       struct dirfile dirfile_key;
@@ -679,7 +700,9 @@ dir_contents_file_exists_p (struct directory_contents *dir,
         }
 
 #if defined(VMS) && defined(HAVE_DIRENT_H)
-      /* In VMS we get file versions too, which have to be stripped off */
+      /* In VMS we get file versions too, which have to be stripped off.
+         Some versions of VMS return versions on Unix files even when
+         the feature option to strip them is set.  */
       {
         char *p = strrchr (d->d_name, ';');
         if (p)
@@ -703,7 +726,8 @@ dir_contents_file_exists_p (struct directory_contents *dir,
         {
           df = xmalloc (sizeof (struct dirfile));
 #if defined(HAVE_CASE_INSENSITIVE_FS) && defined(VMS)
-          df->name = strcache_add_len (downcase (d->d_name), len);
+          /* TODO: Why is this only needed on VMS? */
+          df->name = strcache_add_len (downcase_inplace (d->d_name), len);
 #else
           df->name = strcache_add_len (d->d_name, len);
 #endif
@@ -734,6 +758,15 @@ dir_contents_file_exists_p (struct directory_contents *dir,
 int
 dir_file_exists_p (const char *dirname, const char *filename)
 {
+#ifdef VMS
+  if ((filename != NULL) && (dirname != NULL))
+    {
+      int want_vmsify;
+      want_vmsify = (strpbrk (dirname, ":<[") != NULL);
+      if (want_vmsify)
+        filename = vmsify (filename, 0);
+    }
+#endif
   return dir_contents_file_exists_p (find_directory (dirname)->contents,
                                      filename);
 }
@@ -752,14 +785,24 @@ file_exists_p (const char *name)
     return ar_member_date (name) != (time_t) -1;
 #endif
 
+  dirend = strrchr (name, '/');
 #ifdef VMS
-  dirend = strrchr (name, ']');
   if (dirend == 0)
-    dirend = strrchr (name, ':');
+    {
+      dirend = strrchr (name, ']');
+      dirend == NULL ? dirend : dirend++;
+    }
   if (dirend == 0)
-    return dir_file_exists_p ("[]", name);
-#else /* !VMS */
-  dirend = strrchr (name, '/');
+    {
+      dirend = strrchr (name, '>');
+      dirend == NULL ? dirend : dirend++;
+    }
+  if (dirend == 0)
+    {
+      dirend = strrchr (name, ':');
+      dirend == NULL ? dirend : dirend++;
+    }
+#endif /* VMS */
 #ifdef HAVE_DOS_PATHS
   /* Forward and backslashes might be mixed.  We need the rightmost one.  */
   {
@@ -774,10 +817,9 @@ file_exists_p (const char *name)
   if (dirend == 0)
 #ifndef _AMIGA
     return dir_file_exists_p (".", name);
-#else /* !VMS && !AMIGA */
+#else /* !AMIGA */
     return dir_file_exists_p ("", name);
 #endif /* AMIGA */
-#endif /* VMS */
 
   slash = dirend;
   if (dirend == name)
@@ -796,7 +838,13 @@ file_exists_p (const char *name)
       p[dirend - name] = '\0';
       dirname = p;
     }
-  return dir_file_exists_p (dirname, slash + 1);
+#ifdef VMS
+  if (*slash == '/')
+    slash++;
+#else
+  slash++;
+#endif
+  return dir_file_exists_p (dirname, slash);
 }
 \f
 /* Mark FILENAME as 'impossible' for 'file_impossible_p'.
@@ -811,16 +859,25 @@ file_impossible (const char *filename)
   struct directory *dir;
   struct dirfile *new;
 
-#ifdef VMS
-  dirend = strrchr (p, ']');
-  if (dirend == 0)
-    dirend = strrchr (p, ':');
-  dirend++;
-  if (dirend == (char *)1)
-    dir = find_directory ("[]");
-#else
   dirend = strrchr (p, '/');
-# ifdef HAVE_DOS_PATHS
+#ifdef VMS
+  if (dirend == NULL)
+    {
+      dirend = strrchr (p, ']');
+      dirend == NULL ? dirend : dirend++;
+    }
+  if (dirend == NULL)
+    {
+      dirend = strrchr (p, '>');
+      dirend == NULL ? dirend : dirend++;
+    }
+  if (dirend == NULL)
+    {
+      dirend = strrchr (p, ':');
+      dirend == NULL ? dirend : dirend++;
+    }
+#endif
+#ifdef HAVE_DOS_PATHS
   /* Forward and backslashes might be mixed.  We need the rightmost one.  */
   {
     const char *bslash = strrchr (p, '\\');
@@ -830,14 +887,13 @@ file_impossible (const char *filename)
     if (!dirend && p[0] && p[1] == ':')
       dirend = p + 1;
   }
-# endif /* HAVE_DOS_PATHS */
+#endif /* HAVE_DOS_PATHS */
   if (dirend == 0)
-# ifdef _AMIGA
+#ifdef _AMIGA
     dir = find_directory ("");
-# else /* !VMS && !AMIGA */
+#else /* !AMIGA */
     dir = find_directory (".");
-# endif /* AMIGA */
-#endif /* VMS */
+#endif /* AMIGA */
   else
     {
       const char *dirname;
@@ -859,7 +915,14 @@ file_impossible (const char *filename)
           dirname = cp;
         }
       dir = find_directory (dirname);
+#ifdef VMS
+      if (*slash == '/')
+        filename = p = slash + 1;
+      else
+        filename = p = slash;
+#else
       filename = p = slash + 1;
+#endif
     }
 
   if (dir->contents == 0)
@@ -878,6 +941,7 @@ file_impossible (const char *filename)
   new = xmalloc (sizeof (struct dirfile));
   new->length = strlen (filename);
 #if defined(HAVE_CASE_INSENSITIVE_FS) && defined(VMS)
+  /* todo: Why is this only needed on VMS? */
   new->name = strcache_add_len (downcase (filename), new->length);
 #else
   new->name = strcache_add_len (filename, new->length);
@@ -895,13 +959,22 @@ file_impossible_p (const char *filename)
   struct directory_contents *dir;
   struct dirfile *dirfile;
   struct dirfile dirfile_key;
-
 #ifdef VMS
-  dirend = strrchr (filename, ']');
-  if (dirend == 0)
-    dir = find_directory ("[]")->contents;
-#else
+  int want_vmsify = 0;
+#endif
+
   dirend = strrchr (filename, '/');
+#ifdef VMS
+  if (dirend == NULL)
+    {
+      want_vmsify = (strpbrk (filename, "]>:^") != NULL);
+      dirend = strrchr (filename, ']');
+    }
+  if (dirend == NULL && want_vmsify)
+    dirend = strrchr (filename, '>');
+  if (dirend == NULL && want_vmsify)
+    dirend = strrchr (filename, ':');
+#endif
 #ifdef HAVE_DOS_PATHS
   /* Forward and backslashes might be mixed.  We need the rightmost one.  */
   {
@@ -916,10 +989,9 @@ file_impossible_p (const char *filename)
   if (dirend == 0)
 #ifdef _AMIGA
     dir = find_directory ("")->contents;
-#else /* !VMS && !AMIGA */
+#else /* !AMIGA */
     dir = find_directory (".")->contents;
 #endif /* AMIGA */
-#endif /* VMS */
   else
     {
       const char *dirname;
@@ -941,7 +1013,14 @@ file_impossible_p (const char *filename)
           dirname = cp;
         }
       dir = find_directory (dirname)->contents;
+#ifdef VMS
+      if (*slash == '/')
+        filename = slash + 1;
+      else
+        filename = slash;
+#else
       filename = slash + 1;
+#endif
     }
 
   if (dir == 0 || dir->dirfiles.ht_vec == 0)
@@ -955,7 +1034,8 @@ file_impossible_p (const char *filename)
   filename = downcase (filename);
 #endif
 #ifdef VMS
-  filename = vmsify (filename, 1);
+  if (want_vmsify)
+    filename = vmsify (filename, 1);
 #endif
 
   dirfile_key.name = filename;
@@ -1002,10 +1082,11 @@ print_dir_data_base (void)
           else if (dir->contents->dirfiles.ht_vec == 0)
             {
 #ifdef WINDOWS32
-              printf (_("# %s (key %s, mtime %d): could not be opened.\n"),
-                      dir->name, dir->contents->path_key,dir->contents->mtime);
+              printf (_("# %s (key %s, mtime %ull): could not be opened.\n"),
+                      dir->name, dir->contents->path_key,
+                      (unsigned long long)dir->contents->mtime);
 #else  /* WINDOWS32 */
-#ifdef VMS
+#ifdef VMS_INO_T
               printf (_("# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"),
                       dir->name, dir->contents->dev,
                       dir->contents->ino[0], dir->contents->ino[1],
@@ -1038,10 +1119,11 @@ print_dir_data_base (void)
                     }
                 }
 #ifdef WINDOWS32
-              printf (_("# %s (key %s, mtime %d): "),
-                      dir->name, dir->contents->path_key, dir->contents->mtime);
+              printf (_("# %s (key %s, mtime %ull): "),
+                      dir->name, dir->contents->path_key,
+                      (unsigned long long)dir->contents->mtime);
 #else  /* WINDOWS32 */
-#ifdef VMS
+#ifdef VMS_INO_T
               printf (_("# %s (device %d, inode [%d,%d,%d]): "),
                       dir->name, dir->contents->dev,
                       dir->contents->ino[0], dir->contents->ino[1],
@@ -1087,8 +1169,6 @@ print_dir_data_base (void)
 \f
 /* Hooks for globbing.  */
 
-#include <glob.h>
-
 /* Structure describing state of iterating through a directory hash table.  */
 
 struct dirstream
@@ -1179,9 +1259,16 @@ read_dirstream (__ptr_t stream)
  * On MS-Windows, stat() "succeeds" for foo/bar/. where foo/bar is a
  * regular file; fix that here.
  */
-#if !defined(stat) && !defined(WINDOWS32)
+#if !defined(stat) && !defined(WINDOWS32) || defined(VMS)
 # ifndef VMS
+#  ifndef HAVE_SYS_STAT_H
 int stat (const char *path, struct stat *sbuf);
+#  endif
+# else
+    /* We are done with the fake stat.  Go back to the real stat */
+#   ifdef stat
+#     undef stat
+#   endif
 # endif
 # define local_stat stat
 #else
index 03977ba..11aa4d4 100644 (file)
@@ -1,5 +1,5 @@
 # -*-Makefile-*-, or close enough
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
index f930c6a..e5d2f7d 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # -*-Makefile-*-, or close enough
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
 # You should have received a copy of the GNU General Public License along with
 # this program.  If not, see <http://www.gnu.org/licenses/>.
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -95,21 +105,20 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = doc
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(make_TEXINFOS) $(top_srcdir)/config/mdate-sh \
-       $(srcdir)/version.texi $(srcdir)/stamp-vti \
-       $(top_srcdir)/config/texinfo.tex
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/dospaths.m4 \
        $(top_srcdir)/config/gettext.m4 $(top_srcdir)/config/iconv.m4 \
        $(top_srcdir)/config/intlmacosx.m4 \
        $(top_srcdir)/config/lib-ld.m4 \
        $(top_srcdir)/config/lib-link.m4 \
-       $(top_srcdir)/config/lib-prefix.m4 $(top_srcdir)/config/nls.m4 \
+       $(top_srcdir)/config/lib-prefix.m4 \
+       $(top_srcdir)/config/longlong.m4 $(top_srcdir)/config/nls.m4 \
        $(top_srcdir)/config/po.m4 $(top_srcdir)/config/progtest.m4 \
        $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \
+       $(srcdir)/stamp-vti $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -203,6 +212,8 @@ am__uninstall_files_from_dir = { \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(make_TEXINFOS) $(srcdir)/Makefile.in \
+       $(top_srcdir)/config/mdate-sh $(top_srcdir)/config/texinfo.tex
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
@@ -275,6 +286,7 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
 REMOTE = @REMOTE@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
@@ -326,6 +338,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -355,7 +368,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign doc/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -428,15 +440,16 @@ $(srcdir)/stamp-vti: make.texi $(top_srcdir)/configure
        echo "@set UPDATED $$1 $$2 $$3"; \
        echo "@set UPDATED-MONTH $$2 $$3"; \
        echo "@set EDITION $(VERSION)"; \
-       echo "@set VERSION $(VERSION)") > vti.tmp
-       @cmp -s vti.tmp $(srcdir)/version.texi \
-         || (echo "Updating $(srcdir)/version.texi"; \
-             cp vti.tmp $(srcdir)/version.texi)
-       -@rm -f vti.tmp
+       echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \
+       (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \
+         || (echo "Updating $(srcdir)/version.texi" && \
+             cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \
+             mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \
+       rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$
        @cp $(srcdir)/version.texi $@
 
 mostlyclean-vti:
-       -rm -f vti.tmp
+       -rm -f vti.tmp* $(srcdir)/version.texi.tmp*
 
 maintainer-clean-vti:
        -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
@@ -787,6 +800,8 @@ uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
        uninstall-dvi-am uninstall-html-am uninstall-info-am \
        uninstall-pdf-am uninstall-ps-am
 
+.PRECIOUS: Makefile
+
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
index db01628..d37b244 100644 (file)
@@ -8,7 +8,8 @@
 @cindex standards for makefiles
 
 @c Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
-@c 2004, 2005, 2006, 2007, 2008, 2010, 2013 Free Software Foundation, Inc.
+@c 2004, 2005, 2006, 2007, 2008, 2010, 2013, 2014, 2015
+@c Free Software Foundation, Inc.
 @c
 @c Permission is granted to copy, distribute and/or modify this document
 @c under the terms of the GNU Free Documentation License, Version 1.3
@@ -44,7 +45,7 @@ Autoconf}.
 * DESTDIR::                     Supporting staged installs.
 * Directory Variables::         Variables for installation directories.
 * Standard Targets::            Standard targets for users.
-* Install Command Categories::  Three categories of commands in the `install'
+* Install Command Categories::  Three categories of commands in the @samp{install}
                                   rule: normal, pre-install and post-install.
 @end menu
 
@@ -360,7 +361,7 @@ variants of it are used in GNU/Linux and other modern operating
 systems.
 
 Installers are expected to override these values when calling
-@command{make} (e.g., @kbd{make prefix=/usr install} or
+@command{make} (e.g., @kbd{make prefix=/usr install}) or
 @command{configure} (e.g., @kbd{configure --prefix=/usr}).  GNU
 packages should not try to guess which value should be appropriate for
 these variables on the system they are being installed onto: use the
@@ -685,7 +686,7 @@ prefix = /usr/local
 datarootdir = $(prefix)/share
 datadir = $(datarootdir)
 exec_prefix = $(prefix)
-# Where to put the executable for the command `gcc'.
+# Where to put the executable for the command 'gcc'.
 bindir = $(exec_prefix)/bin
 # Where to put the directories used by the compiler.
 libexecdir = $(exec_prefix)/libexec
@@ -781,9 +782,9 @@ do-install-info: foo.info installdirs
         $(INSTALL_DATA) $$d/foo.info \
           "$(DESTDIR)$(infodir)/foo.info"
 # Run install-info only if it exists.
-# Use `if' instead of just prepending `-' to the
+# Use 'if' instead of just prepending '-' to the
 # line so we notice real errors from install-info.
-# Use `$(SHELL) -c' because some shells do not
+# Use '$(SHELL) -c' because some shells do not
 # fail gracefully when there is an unknown command.
         $(POST_INSTALL)
         if $(SHELL) -c 'install-info --version' \
index 7a54c1b..50f6c0c 100644 (file)
@@ -1,15 +1,15 @@
-This is make.info, produced by makeinfo version 5.2 from make.texi.
+This is make.info, produced by makeinfo version 6.1 from make.texi.
 
 This file documents the GNU 'make' utility, which determines
 automatically which pieces of a large program need to be recompiled, and
 issues the commands to recompile them.
 
-   This is Edition 0.73, last updated 5 October 2014, of 'The GNU Make
-Manual', for GNU 'make' version 4.1.
+   This is Edition 0.74, last updated 21 May 2016, of 'The GNU Make
+Manual', for GNU 'make' version 4.2.
 
    Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+2010, 2011, 2012, 2013, 2014, 2015, 2016 Free Software Foundation, Inc.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Free Documentation License,
@@ -29,172 +29,177 @@ END-INFO-DIR-ENTRY
 
 \1f
 Indirect:
-make.info-1: 1342
-make.info-2: 305689
+make.info-1: 1351
+make.info-2: 307134
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f1342
-Node: Overview\7f16115
-Node: Preparing\7f17128
-Node: Reading\7f18096
-Node: Bugs\7f19023
-Node: Introduction\7f20852
-Node: Rule Introduction\7f22445
-Node: Simple Makefile\7f24378
-Node: How Make Works\7f28114
-Node: Variables Simplify\7f30763
-Node: make Deduces\7f32969
-Node: Combine By Prerequisite\7f34702
-Node: Cleanup\7f35731
-Node: Makefiles\7f37149
-Node: Makefile Contents\7f37985
-Node: Splitting Lines\7f41158
-Node: Makefile Names\7f42918
-Node: Include\7f44525
-Ref: Include-Footnote-1\7f48269
-Node: MAKEFILES Variable\7f48403
-Node: Remaking Makefiles\7f49944
-Node: Overriding Makefiles\7f54169
-Node: Reading Makefiles\7f56197
-Node: Secondary Expansion\7f59659
-Node: Rules\7f67120
-Node: Rule Example\7f69793
-Node: Rule Syntax\7f70646
-Node: Prerequisite Types\7f73241
-Node: Wildcards\7f76108
-Node: Wildcard Examples\7f77827
-Node: Wildcard Pitfall\7f79177
-Node: Wildcard Function\7f80966
-Node: Directory Search\7f82750
-Node: General Search\7f83885
-Node: Selective Search\7f85592
-Node: Search Algorithm\7f88582
-Node: Recipes/Search\7f91100
-Node: Implicit/Search\7f92423
-Node: Libraries/Search\7f93365
-Node: Phony Targets\7f95336
-Node: Force Targets\7f100173
-Node: Empty Targets\7f101210
-Node: Special Targets\7f102512
-Node: Multiple Targets\7f110385
-Node: Multiple Rules\7f112245
-Node: Static Pattern\7f114463
-Node: Static Usage\7f115115
-Node: Static versus Implicit\7f118834
-Node: Double-Colon\7f120574
-Node: Automatic Prerequisites\7f122334
-Node: Recipes\7f126595
-Node: Recipe Syntax\7f127767
-Node: Splitting Recipe Lines\7f129882
-Node: Variables in Recipes\7f133035
-Node: Echoing\7f134361
-Node: Execution\7f135636
-Ref: Execution-Footnote-1\7f137049
-Node: One Shell\7f137194
-Node: Choosing the Shell\7f140509
-Node: Parallel\7f144653
-Node: Parallel Output\7f147322
-Node: Parallel Input\7f151749
-Node: Errors\7f152868
-Node: Interrupts\7f156532
-Node: Recursion\7f158115
-Node: MAKE Variable\7f160212
-Node: Variables/Recursion\7f162455
-Node: Options/Recursion\7f167900
-Node: -w Option\7f173918
-Node: Canned Recipes\7f174913
-Node: Empty Recipes\7f177896
-Node: Using Variables\7f179044
-Node: Reference\7f182472
-Node: Flavors\7f184030
-Node: Advanced\7f190009
-Node: Substitution Refs\7f190514
-Node: Computed Names\7f192067
-Node: Values\7f196615
-Node: Setting\7f197532
-Node: Appending\7f200441
-Node: Override Directive\7f204383
-Node: Multi-Line\7f206010
-Node: Undefine Directive\7f208834
-Node: Environment\7f209923
-Node: Target-specific\7f212175
-Node: Pattern-specific\7f215202
-Node: Suppressing Inheritance\7f217049
-Node: Special Variables\7f218502
-Node: Conditionals\7f224911
-Node: Conditional Example\7f225624
-Node: Conditional Syntax\7f228187
-Node: Testing Flags\7f233944
-Node: Functions\7f235045
-Node: Syntax of Functions\7f236605
-Node: Text Functions\7f238939
-Node: File Name Functions\7f247504
-Node: Conditional Functions\7f252730
-Node: Foreach Function\7f255105
-Node: File Function\7f258318
-Node: Call Function\7f260396
-Node: Value Function\7f263281
-Node: Eval Function\7f264718
-Node: Origin Function\7f266994
-Node: Flavor Function\7f270220
-Node: Make Control Functions\7f271264
-Node: Shell Function\7f272950
-Node: Guile Function\7f274583
-Node: Running\7f275333
-Node: Makefile Arguments\7f277314
-Node: Goals\7f278030
-Node: Instead of Execution\7f282769
-Node: Avoiding Compilation\7f286484
-Node: Overriding\7f288459
-Node: Testing\7f290771
-Node: Options Summary\7f292655
-Node: Implicit Rules\7f305689
-Node: Using Implicit\7f307826
-Node: Catalogue of Rules\7f311345
-Node: Implicit Variables\7f320689
-Node: Chained Rules\7f325762
-Node: Pattern Rules\7f329772
-Node: Pattern Intro\7f331306
-Node: Pattern Examples\7f333888
-Node: Automatic Variables\7f335695
-Node: Pattern Match\7f343045
-Node: Match-Anything Rules\7f346368
-Node: Canceling Rules\7f350247
-Node: Last Resort\7f350961
-Node: Suffix Rules\7f352790
-Node: Implicit Rule Search\7f356515
-Node: Archives\7f360014
-Node: Archive Members\7f360719
-Node: Archive Update\7f362329
-Node: Archive Symbols\7f364240
-Node: Archive Pitfalls\7f365473
-Node: Archive Suffix Rules\7f366195
-Node: Extending make\7f367743
-Node: Guile Integration\7f368880
-Node: Guile Types\7f370108
-Node: Guile Interface\7f372528
-Node: Guile Example\7f373814
-Node: Loading Objects\7f376005
-Node: load Directive\7f377495
-Node: Remaking Loaded Objects\7f380249
-Node: Loaded Object API\7f380883
-Node: Loaded Object Example\7f387645
-Node: Features\7f389892
-Node: Missing\7f399059
-Node: Makefile Conventions\7f402784
-Node: Makefile Basics\7f403763
-Node: Utilities in Makefiles\7f406930
-Node: Command Variables\7f409429
-Node: DESTDIR\7f412669
-Node: Directory Variables\7f414836
-Node: Standard Targets\7f430192
-Node: Install Command Categories\7f444298
-Node: Quick Reference\7f448824
-Node: Error Messages\7f461529
-Node: Complex Makefile\7f469425
-Node: GNU Free Documentation License\7f478043
-Node: Concept Index\7f503185
-Node: Name Index\7f573971
+Node: Top\7f1351
+Node: Overview\7f16531
+Node: Preparing\7f17544
+Node: Reading\7f18512
+Node: Bugs\7f19439
+Node: Introduction\7f21268
+Node: Rule Introduction\7f22861
+Node: Simple Makefile\7f24794
+Node: How Make Works\7f28530
+Node: Variables Simplify\7f31179
+Node: make Deduces\7f33385
+Node: Combine By Prerequisite\7f35118
+Node: Cleanup\7f36147
+Node: Makefiles\7f37565
+Node: Makefile Contents\7f38401
+Node: Splitting Lines\7f41574
+Node: Makefile Names\7f43334
+Node: Include\7f44941
+Ref: Include-Footnote-1\7f48685
+Node: MAKEFILES Variable\7f48819
+Node: Remaking Makefiles\7f50360
+Node: Overriding Makefiles\7f54585
+Node: Reading Makefiles\7f56613
+Node: Secondary Expansion\7f60075
+Node: Rules\7f67536
+Node: Rule Example\7f70209
+Node: Rule Syntax\7f71062
+Node: Prerequisite Types\7f73657
+Node: Wildcards\7f76524
+Node: Wildcard Examples\7f78243
+Node: Wildcard Pitfall\7f79593
+Node: Wildcard Function\7f81382
+Node: Directory Search\7f83166
+Node: General Search\7f84301
+Node: Selective Search\7f86008
+Node: Search Algorithm\7f88998
+Node: Recipes/Search\7f91516
+Node: Implicit/Search\7f92839
+Node: Libraries/Search\7f93781
+Node: Phony Targets\7f95752
+Node: Force Targets\7f100589
+Node: Empty Targets\7f101626
+Node: Special Targets\7f102928
+Node: Multiple Targets\7f110801
+Node: Multiple Rules\7f112661
+Node: Static Pattern\7f114879
+Node: Static Usage\7f115531
+Node: Static versus Implicit\7f119250
+Node: Double-Colon\7f120990
+Node: Automatic Prerequisites\7f122750
+Node: Recipes\7f127011
+Node: Recipe Syntax\7f128183
+Node: Splitting Recipe Lines\7f130298
+Node: Variables in Recipes\7f133451
+Node: Echoing\7f134777
+Node: Execution\7f136052
+Ref: Execution-Footnote-1\7f137465
+Node: One Shell\7f137610
+Node: Choosing the Shell\7f140925
+Node: Parallel\7f145069
+Node: Parallel Output\7f147738
+Node: Parallel Input\7f152165
+Node: Errors\7f153284
+Node: Interrupts\7f156948
+Node: Recursion\7f158531
+Node: MAKE Variable\7f160628
+Node: Variables/Recursion\7f162871
+Node: Options/Recursion\7f168316
+Node: -w Option\7f174322
+Node: Canned Recipes\7f175317
+Node: Empty Recipes\7f178300
+Node: Using Variables\7f179740
+Node: Reference\7f183168
+Node: Flavors\7f184726
+Node: Advanced\7f190705
+Node: Substitution Refs\7f191210
+Node: Computed Names\7f192763
+Node: Values\7f197311
+Node: Setting\7f198228
+Node: Appending\7f201267
+Node: Override Directive\7f205211
+Node: Multi-Line\7f206838
+Node: Undefine Directive\7f209662
+Node: Environment\7f210751
+Node: Target-specific\7f213003
+Node: Pattern-specific\7f216030
+Node: Suppressing Inheritance\7f217877
+Node: Special Variables\7f219330
+Node: Conditionals\7f225739
+Node: Conditional Example\7f226452
+Node: Conditional Syntax\7f229015
+Node: Testing Flags\7f234775
+Node: Functions\7f235876
+Node: Syntax of Functions\7f237436
+Node: Text Functions\7f239770
+Node: File Name Functions\7f248335
+Node: Conditional Functions\7f253561
+Node: Foreach Function\7f255936
+Node: File Function\7f259149
+Node: Call Function\7f261706
+Node: Value Function\7f264591
+Node: Eval Function\7f266028
+Node: Origin Function\7f268304
+Node: Flavor Function\7f271530
+Node: Make Control Functions\7f272574
+Node: Shell Function\7f274260
+Node: Guile Function\7f276019
+Node: Running\7f276769
+Node: Makefile Arguments\7f278750
+Node: Goals\7f279466
+Node: Instead of Execution\7f284205
+Node: Avoiding Compilation\7f287920
+Node: Overriding\7f289895
+Node: Testing\7f292207
+Node: Options Summary\7f294091
+Node: Implicit Rules\7f307134
+Node: Using Implicit\7f309271
+Node: Catalogue of Rules\7f312790
+Node: Implicit Variables\7f322134
+Node: Chained Rules\7f327207
+Node: Pattern Rules\7f331217
+Node: Pattern Intro\7f332751
+Node: Pattern Examples\7f335333
+Node: Automatic Variables\7f337140
+Node: Pattern Match\7f344492
+Node: Match-Anything Rules\7f347815
+Node: Canceling Rules\7f351694
+Node: Last Resort\7f352408
+Node: Suffix Rules\7f354237
+Node: Implicit Rule Search\7f357962
+Node: Archives\7f361461
+Node: Archive Members\7f362166
+Node: Archive Update\7f363776
+Node: Archive Symbols\7f365687
+Node: Archive Pitfalls\7f366920
+Node: Archive Suffix Rules\7f367642
+Node: Extending make\7f369190
+Node: Guile Integration\7f370335
+Node: Guile Types\7f371563
+Node: Guile Interface\7f373983
+Node: Guile Example\7f375269
+Node: Loading Objects\7f377460
+Node: load Directive\7f378950
+Node: Remaking Loaded Objects\7f381704
+Node: Loaded Object API\7f382338
+Node: Loaded Object Example\7f389100
+Node: Integrating make\7f391347
+Node: Job Slots\7f392098
+Node: POSIX Jobserver\7f395530
+Node: Windows Jobserver\7f397924
+Node: Terminal Output\7f399277
+Node: Features\7f401666
+Node: Missing\7f410835
+Node: Makefile Conventions\7f414560
+Node: Makefile Basics\7f415539
+Node: Utilities in Makefiles\7f418706
+Node: Command Variables\7f421205
+Node: DESTDIR\7f424445
+Node: Directory Variables\7f426612
+Node: Standard Targets\7f441969
+Node: Install Command Categories\7f456075
+Node: Quick Reference\7f460601
+Node: Error Messages\7f473315
+Node: Complex Makefile\7f481211
+Node: GNU Free Documentation License\7f489829
+Node: Concept Index\7f514971
+Node: Name Index\7f586479
 \1f
 End Tag Table
index 2a1a922..259d408 100644 (file)
@@ -1,15 +1,15 @@
-This is make.info, produced by makeinfo version 5.2 from make.texi.
+This is make.info, produced by makeinfo version 6.1 from make.texi.
 
 This file documents the GNU 'make' utility, which determines
 automatically which pieces of a large program need to be recompiled, and
 issues the commands to recompile them.
 
-   This is Edition 0.73, last updated 5 October 2014, of 'The GNU Make
-Manual', for GNU 'make' version 4.1.
+   This is Edition 0.74, last updated 21 May 2016, of 'The GNU Make
+Manual', for GNU 'make' version 4.2.
 
    Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+2010, 2011, 2012, 2013, 2014, 2015, 2016 Free Software Foundation, Inc.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Free Documentation License,
@@ -37,12 +37,12 @@ This file documents the GNU 'make' utility, which determines
 automatically which pieces of a large program need to be recompiled, and
 issues the commands to recompile them.
 
-   This is Edition 0.73, last updated 5 October 2014, of 'The GNU Make
-Manual', for GNU 'make' version 4.1.
+   This is Edition 0.74, last updated 21 May 2016, of 'The GNU Make
+Manual', for GNU 'make' version 4.2.
 
    Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+2010, 2011, 2012, 2013, 2014, 2015, 2016 Free Software Foundation, Inc.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Free Documentation License,
@@ -72,6 +72,7 @@ Manual', for GNU 'make' version 4.1.
                                   based on their file names.
 * Archives::                    How 'make' can update library archives.
 * Extending make::              Using extensions to 'make'.
+* Integrating make::            Integrating 'make' with other tools.
 * Features::                    Features GNU 'make' has over other 'make's.
 * Missing::                     What GNU 'make' lacks from other 'make's.
 * Makefile Conventions::        Conventions for writing makefiles for
@@ -327,6 +328,16 @@ Loading Dynamic Objects
 * Loaded Object API::           Programmatic interface for loaded objects.
 * Loaded Object Example::       Example of a loaded object
 
+Integrating GNU 'make'
+
+* Job Slots::                   Share job slots with GNU 'make'.
+* Terminal Output::             Control output to terminals.
+
+Sharing Job Slots with GNU 'make'
+
+* POSIX Jobserver::             Using the jobserver on POSIX systems.
+* Windows Jobserver::           Using the jobserver on Windows systems.
+
 
 \1f
 File: make.info,  Node: Overview,  Next: Introduction,  Prev: Top,  Up: Top
@@ -2514,8 +2525,8 @@ Certain names have special meanings if they appear as targets.
      '.SILENT' is supported only for historical compatibility.  We
      recommend you use the more selective ways to silence specific
      recipes.  *Note Recipe Echoing: Echoing.  If you want to silence
-     all recipes for a particular run of 'make', use the '-s' or '--silent'
-     option (*note Options Summary::).
+     all recipes for a particular run of 'make', use the '-s' or
+     '--silent' option (*note Options Summary::).
 
 '.EXPORT_ALL_VARIABLES'
 
@@ -3746,9 +3757,9 @@ the '+' token to get these special effects.
 option marks targets as up to date without actually running any recipes;
 see *note Instead of Execution::.)  Following the usual definition of
 '-t', a 'make -t' command in the example would create a file named
-'subsystem' and do nothing else.  What you really want it to do is run 'cd subdir &&
-make -t'; but that would require executing the recipe, and '-t' says not
-to execute recipes.
+'subsystem' and do nothing else.  What you really want it to do is run
+'cd subdir && make -t'; but that would require executing the recipe, and
+'-t' says not to execute recipes.
 
    The special feature makes this do what you want: whenever a recipe
 line of a rule contains the variable 'MAKE', the flags '-t', '-n' and
@@ -3928,12 +3939,12 @@ Recipes: Instead of Execution.) doesn't count against the total jobs
 over for any real work!)
 
    If your operating system doesn't support the above communication,
-then '-j 1' is always put into 'MAKEFLAGS' instead of the value you
-specified.  This is because if the '-j' option were passed down to
-sub-'make's, you would get many more jobs running in parallel than you
-asked for.  If you give '-j' with no numeric argument, meaning to run as
-many jobs as possible in parallel, this is passed down, since multiple
-infinities are no more than one.
+then no '-j' is added to 'MAKEFLAGS', so that sub-'make's run in
+non-parallel mode.  If the '-j' option were passed down to sub-'make's
+you would get many more jobs running in parallel than you asked for.  If
+you give '-j' with no numeric argument, meaning to run as many jobs as
+possible in parallel, this is passed down, since multiple infinities are
+no more than one.
 
    If you do not want to pass the other flags down, you must change the
 value of 'MAKEFLAGS', like this:
@@ -4018,11 +4029,11 @@ File: make.info,  Node: -w Option,  Prev: Options/Recursion,  Up: Recursion
 5.7.4 The '--print-directory' Option
 ------------------------------------
 
-If you use several levels of recursive 'make' invocations, the '-w' or '--print-directory'
-option can make the output a lot easier to understand by showing each
-directory as 'make' starts processing it and as 'make' finishes
-processing it.  For example, if 'make -w' is run in the directory
-'/u/gnu/make', 'make' will print a line of the form:
+If you use several levels of recursive 'make' invocations, the '-w' or
+'--print-directory' option can make the output a lot easier to
+understand by showing each directory as 'make' starts processing it and
+as 'make' finishes processing it.  For example, if 'make -w' is run in
+the directory '/u/gnu/make', 'make' will print a line of the form:
 
      make: Entering directory `/u/gnu/make'.
 
@@ -4129,10 +4140,16 @@ beginning with a recipe prefix character to define an empty recipe, but
 this would be confusing because such a line looks empty.
 
    You may be wondering why you would want to define a recipe that does
-nothing.  The only reason this is useful is to prevent a target from
-getting implicit recipes (from implicit rules or the '.DEFAULT' special
-target; *note Implicit Rules:: and *note Defining Last-Resort Default
-Rules: Last Resort.).
+nothing.  One reason this is useful is to prevent a target from getting
+implicit recipes (from implicit rules or the '.DEFAULT' special target;
+*note Implicit Rules:: and *note Defining Last-Resort Default Rules:
+Last Resort.).
+
+   Empty recipes can also be used to avoid errors for targets that will
+be created as a side-effect of another recipe: if the target does not
+exist the empty recipe ensures that 'make' won't complain that it
+doesn't know how to build the target, and 'make' will assume the target
+is out of date.
 
    You may be inclined to define empty recipes for targets that are not
 actual files, but only exist so that their prerequisites can be remade.
@@ -4627,8 +4644,8 @@ File: make.info,  Node: Setting,  Next: Appending,  Prev: Values,  Up: Using Var
 =====================
 
 To set a variable from the makefile, write a line starting with the
-variable name followed by '=' ':=', or '::='.  Whatever follows the '=',
-':=', or '::=' on the line becomes the value.  For example,
+variable name followed by '=', ':=', or '::='.  Whatever follows the
+'=', ':=', or '::=' on the line becomes the value.  For example,
 
      objects = main.o foo.o bar.o utils.o
 
@@ -4671,10 +4688,10 @@ and
      FOO = bar
      endif
 
-   The shell assignment operator '!=' can be used to execute a program
-and set a variable to its output.  This operator first evaluates the
-right-hand side, then passes that result to the shell for execution.  If
-the result of the execution ends in a newline, that one newline is
+   The shell assignment operator '!=' can be used to execute a shell
+script and set a variable to its output.  This operator first evaluates
+the right-hand side, then passes that result to the shell for execution.
+If the result of the execution ends in a newline, that one newline is
 removed; all other newlines are replaced by spaces.  The resulting
 string is then placed into the named recursively-expanded variable.  For
 example:
@@ -4692,6 +4709,9 @@ The 'shell' Function: Shell Function.  For example:
      hash := $(shell printf '\043')
      var := $(shell find . -name "*.c")
 
+   As with the 'shell' function, the exit status of the just-invoked
+shell script is stored in the '.SHELLSTATUS' variable.
+
 \1f
 File: make.info,  Node: Appending,  Next: Override Directive,  Prev: Setting,  Up: Using Variables
 
@@ -4771,12 +4791,12 @@ references.  Take this common example:
 The first line defines the 'CFLAGS' variable with a reference to another
 variable, 'includes'.  ('CFLAGS' is used by the rules for C compilation;
 *note Catalogue of Built-In Rules: Catalogue of Rules.)  Using '=' for
-the definition makes 'CFLAGS' a recursively-expanded variable, meaning '$(includes) -O'
-is _not_ expanded when 'make' processes the definition of 'CFLAGS'.
-Thus, 'includes' need not be defined yet for its value to take effect.
-It only has to be defined before any reference to 'CFLAGS'.  If we tried
-to append to the value of 'CFLAGS' without using '+=', we might do it
-like this:
+the definition makes 'CFLAGS' a recursively-expanded variable, meaning
+'$(includes) -O' is _not_ expanded when 'make' processes the definition
+of 'CFLAGS'.  Thus, 'includes' need not be defined yet for its value to
+take effect.  It only has to be defined before any reference to
+'CFLAGS'.  If we tried to append to the value of 'CFLAGS' without using
+'+=', we might do it like this:
 
      CFLAGS := $(CFLAGS) -pg # enable profiling
 
@@ -5476,7 +5496,7 @@ table of them:
 
 'ifdef VARIABLE-NAME'
      The 'ifdef' form takes the _name_ of a variable as its argument,
-     not a reference to a variable.  The value of that variable has a
+     not a reference to a variable.  If the value of that variable has a
      non-empty value, the TEXT-IF-TRUE is effective; otherwise, the
      TEXT-IF-FALSE, if any, is effective.  Variables that have never
      been defined have an empty value.  The text VARIABLE-NAME is
@@ -6163,31 +6183,41 @@ File: make.info,  Node: File Function,  Next: Call Function,  Prev: Foreach Func
 8.6 The 'file' Function
 =======================
 
-The 'file' function allows the makefile to write to a file.  Two modes
-of writing are supported: overwrite, where the text is written to the
-beginning of the file and any existing content is lost, and append,
-where the text is written to the end of the file, preserving the
-existing content.  In all cases the file is created if it does not
-exist.
+The 'file' function allows the makefile to write to or read from a file.
+Two modes of writing are supported: overwrite, where the text is written
+to the beginning of the file and any existing content is lost, and
+append, where the text is written to the end of the file, preserving the
+existing content.  In both cases the file is created if it does not
+exist.  It is a fatal error if the file cannot be opened for writing, or
+if the write operation fails.  The 'file' function expands to the empty
+string when writing to a file.
+
+   When reading from a file, the 'file' function expands to the verbatim
+contents of the file, except that the final newline (if there is one)
+will be stripped.  Attempting to read from a non-existent file expands
+to the empty string.
 
    The syntax of the 'file' function is:
 
      $(file OP FILENAME[,TEXT])
 
-   The operator OP can be either '>' which indicates overwrite mode, or
-'>>' which indicates append mode.  The FILENAME indicates the file to be
-written to.  There may optionally be whitespace between the operator and
-the file name.
-
-   When the 'file' function is expanded all its arguments are expanded
+   When the 'file' function is evaluated all its arguments are expanded
 first, then the file indicated by FILENAME will be opened in the mode
-described by OP.  Finally TEXT will be written to the file.  If TEXT
-does not already end in a newline, even if empty, a final newline will
-be written.  If the TEXT argument is not given, nothing will be written.
-The result of evaluating the 'file' function is always the empty string.
+described by OP.
 
-   It is a fatal error if the file cannot be opened for writing, or if
-the write operation fails.
+   The operator OP can be '>' to indicate the file will be overwritten
+with new content, '>>' to indicate the current contents of the file will
+be appended to, or '<' to indicate the contents of the file will be read
+in.  The FILENAME specifies the file to be written to or read from.
+There may optionally be whitespace between the operator and the file
+name.
+
+   When reading files, it is an error to provide a TEXT value.
+
+   When writing files, TEXT will be written to the file.  If TEXT does
+not already end in a newline a final newline will be written (even if
+TEXT is the empty string).  If the TEXT argument is not given at all,
+nothing will be written.
 
    For example, the 'file' function can be useful if your build system
 has a limited command line size and your recipe runs a command that can
@@ -6586,6 +6616,9 @@ should carefully consider the performance implications of using the
 'shell' function within recursively expanded variables vs. simply
 expanded variables (*note The Two Flavors of Variables: Flavors.).
 
+   After the 'shell' function or '!=' assignment operator is used, its
+exit status is placed in the '.SHELLSTATUS' variable.
+
    Here are some examples of the use of the 'shell' function:
 
      contents := $(shell cat foo)
@@ -6732,8 +6765,8 @@ containing several programs, with a makefile that starts like this:
      .PHONY: all
      all: size nm ld ar as
 
-   If you are working on the program 'size', you might want to say 'make size'
-so that only the files of that program are recompiled.
+   If you are working on the program 'size', you might want to say
+'make size' so that only the files of that program are recompiled.
 
    Another use of specifying a goal is to make files that are not
 normally made.  For example, there may be a file of debugging output, or
index c6229ff..1556b8f 100644 (file)
@@ -1,15 +1,15 @@
-This is make.info, produced by makeinfo version 5.2 from make.texi.
+This is make.info, produced by makeinfo version 6.1 from make.texi.
 
 This file documents the GNU 'make' utility, which determines
 automatically which pieces of a large program need to be recompiled, and
 issues the commands to recompile them.
 
-   This is Edition 0.73, last updated 5 October 2014, of 'The GNU Make
-Manual', for GNU 'make' version 4.1.
+   This is Edition 0.74, last updated 21 May 2016, of 'The GNU Make
+Manual', for GNU 'make' version 4.2.
 
    Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+2010, 2011, 2012, 2013, 2014, 2015, 2016 Free Software Foundation, Inc.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Free Documentation License,
@@ -890,12 +890,13 @@ the variants:
      all prerequisites that are newer than the target.
 
    Note that we use a special stylistic convention when we talk about
-these automatic variables; we write "the value of '$<'", rather than "the variable '<'"
-as we would write for ordinary variables such as 'objects' and 'CFLAGS'.
-We think this convention looks more natural in this special case.
-Please do not assume it has a deep significance; '$<' refers to the
-variable named '<' just as '$(CFLAGS)' refers to the variable named
-'CFLAGS'.  You could just as well use '$(<)' in place of '$<'.
+these automatic variables; we write "the value of '$<'", rather than
+"the variable '<'" as we would write for ordinary variables such as
+'objects' and 'CFLAGS'.  We think this convention looks more natural in
+this special case.  Please do not assume it has a deep significance;
+'$<' refers to the variable named '<' just as '$(CFLAGS)' refers to the
+variable named 'CFLAGS'.  You could just as well use '$(<)' in place of
+'$<'.
 
 \1f
 File: make.info,  Node: Pattern Match,  Next: Match-Anything Rules,  Prev: Automatic Variables,  Up: Pattern Rules
@@ -1472,7 +1473,7 @@ normal way (*note Suffix Rules::).  Thus a double-suffix rule '.X.a'
 produces two pattern rules: '(%.o): %.X' and '%.a: %.X'.
 
 \1f
-File: make.info,  Node: Extending make,  Next: Features,  Prev: Archives,  Up: Top
+File: make.info,  Node: Extending make,  Next: Integrating make,  Prev: Archives,  Up: Top
 
 12 Extending GNU 'make'
 ***********************
@@ -2045,9 +2046,215 @@ is 1):
      Temporary filename: tmpfile.A7JEwd
 
 \1f
-File: make.info,  Node: Features,  Next: Missing,  Prev: Extending make,  Up: Top
+File: make.info,  Node: Integrating make,  Next: Features,  Prev: Extending make,  Up: Top
 
-13 Features of GNU 'make'
+13 Integrating GNU 'make'
+*************************
+
+GNU 'make' is often one component in a larger system of tools, including
+integrated development environments, compiler toolchains, and others.
+The role of 'make' is to start commands and determine whether they
+succeeded or not: no special integration is needed to accomplish that.
+However, sometimes it is convenient to bind 'make' more tightly with
+other parts of the system, both higher-level (tools that invoke 'make')
+and lower-level (tools that 'make' invokes).
+
+* Menu:
+
+* Job Slots::                   Share job slots with GNU 'make'.
+* Terminal Output::             Control output to terminals.
+
+\1f
+File: make.info,  Node: Job Slots,  Next: Terminal Output,  Prev: Integrating make,  Up: Integrating make
+
+13.1 Sharing Job Slots with GNU 'make'
+======================================
+
+GNU 'make' has the ability to run multiple recipes in parallel (*note
+Parallel Execution: Parallel.) and to cap the total number of parallel
+jobs even across recursive invocations of 'make' (*note Communicating
+Options to a Sub-'make': Options/Recursion.).  Tools that 'make' invokes
+which are also able to run multiple operations in parallel, either using
+multiple threads or multiple processes, can be enhanced to participate
+in GNU 'make''s job management facility to ensure that the total number
+of active threads/processes running on the system does not exceed the
+maximum number of slots provided to GNU 'make'.
+
+   GNU 'make' uses a method called the "jobserver" to control the number
+of active jobs across recursive invocations.  The actual implementation
+of the jobserver varies across different operating systems, but some
+fundamental aspects are always true.
+
+   First, only command lines that 'make' understands to be recursive
+invocations of 'make' (*note How the 'MAKE' Variable Works: MAKE
+Variable.) will have access to the jobserver.  When writing makefiles
+you must be sure to mark the command as recursive (most commonly by
+prefixing the command line with the '+' indicator (*note Recursive Use
+of 'make': Recursion.).
+
+   Second, 'make' will provide information necessary for accessing the
+jobserver through the environment to its children, in the 'MAKEFLAGS'
+environment variable.  Tools which want to participate in the jobserver
+protocol will need to parse this environment variable, as described in
+subsequent sections.
+
+   Third, every command 'make' starts has one implicit job slot reserved
+for it before it starts.  Any tool which wants to participate in the
+jobserver protocol should assume it can always run one job without
+having to contact the jobserver at all.
+
+   Finally, it's critical that tools that participate in the jobserver
+protocol return the exact number of slots they obtained from the
+jobserver back to the jobserver before they exit, even under error
+conditions.  Remember that the implicit job slot should *not* be
+returned to the jobserver!  Returning too few slots means that those
+slots will be lost for the rest of the build process; returning too many
+slots means that extra slots will be available.  The top-level 'make'
+command will print an error message at the end of the build if it
+detects an incorrect number of slots available in the jobserver.
+
+   As an example, suppose you are implementing a linker which provides
+for multithreaded operation.  You would like to enhance the linker so
+that if it is invoked by GNU 'make' it can participate in the jobserver
+protocol to control how many threads are used during link.  First you
+will need to modify the linker to determine if the 'MAKEFLAGS'
+environment variable is set.  Next you will need to parse the value of
+that variable to determine if the jobserver is available, and how to
+access it.  If it is available then you can access it to obtain job
+slots controlling how much parallelism your tool can use.  Once done
+your tool must return those job slots back to the jobserver.
+
+* Menu:
+
+* POSIX Jobserver::             Using the jobserver on POSIX systems.
+* Windows Jobserver::           Using the jobserver on Windows systems.
+
+\1f
+File: make.info,  Node: POSIX Jobserver,  Next: Windows Jobserver,  Prev: Job Slots,  Up: Job Slots
+
+13.1.1 POSIX Jobserver Interaction
+----------------------------------
+
+On POSIX systems the jobserver is implemented as a simple UNIX pipe.
+The pipe will be pre-loaded with one single-character token for each
+available job.  To obtain an extra slot you must read a single character
+from the jobserver pipe; to release a slot you must write a single
+character back into the jobserver pipe.
+
+   To access the pipe you must parse the 'MAKEFLAGS' variable and look
+for the argument string '--jobserver-auth=R,W' where 'R' and 'W' are
+non-negative integers representing file descriptors: 'R' is the read
+file descriptor and 'W' is the write file descriptor.
+
+   It's important that when you release the job slot, you write back the
+same character you read from the pipe for that slot.  Don't assume that
+all tokens are the same character; different characters may have
+different meanings to GNU 'make'.  The order is not important, since
+'make' has no idea in what order jobs will complete anyway.
+
+   There are various error conditions you must consider to ensure your
+implementation is robust:
+
+   * Usually you will have a command-line argument controlling the
+     parallel operation of your tool.  Consider whether your tool should
+     detect situations where both the jobserver and the command-line
+     argument are specified, and how it should react.
+
+   * If your tool determines that the '--jobserver-auth' option is
+     available in 'MAKEFLAGS' but that the file descriptors specified
+     are closed, this means that the calling 'make' process did not
+     think that your tool was a recursive 'make' invocation (e.g., the
+     command line was not prefixed with a '+' character).  You should
+     notify your users of this situation.
+
+   * Your tool should also examine the first word of the 'MAKEFLAGS'
+     variable and look for the character 'n'.  If this character is
+     present then 'make' was invoked with the '-n' option and your tool
+     should stop without performing any operations.
+
+   * Your tool should be sure to write back the tokens it read, even
+     under error conditions.  This includes not only errors in your tool
+     but also outside influences such as interrupts ('SIGINT'), etc.
+     You may want to install signal handlers to manage this write-back.
+
+\1f
+File: make.info,  Node: Windows Jobserver,  Prev: POSIX Jobserver,  Up: Job Slots
+
+13.1.2 Windows Jobserver Interaction
+------------------------------------
+
+On Windows systems the jobserver is implemented as a named semaphore.
+The semaphore will be set with an initial count equal to the number of
+available slots; to obtain a slot you must wait on the semaphore (with
+or without a timeout).  To release a slot, release the semaphore.
+
+   To access the semaphore you must parse the 'MAKEFLAGS' variable and
+look for the argument string '--jobserver-auth=NAME' where 'NAME' is the
+name of the named semaphore.  Use this name with 'OpenSemaphore' to
+create a handle to the semaphore.
+
+   There are various error conditions you must consider to ensure your
+implementation is robust:
+
+   * Usually you will have a command-line argument controlling the
+     parallel operation of your tool.  Consider whether your tool should
+     detect situations where both the jobserver and the command-line
+     argument are specified, and how it should react.
+
+   * Your tool should be sure to release the semaphore for the tokens it
+     read, even under error conditions.  This includes not only errors
+     in your tool but also outside influences such as interrupts
+     ('SIGINT'), etc.  You may want to install signal handlers to manage
+     this write-back.
+
+\1f
+File: make.info,  Node: Terminal Output,  Prev: Job Slots,  Up: Integrating make
+
+13.2 Synchronized Terminal Output
+=================================
+
+Normally GNU 'make' will invoke all commands with access to the same
+standard and error outputs that 'make' itself was started with.  A
+number of tools will detect whether the output is a terminal or
+not-a-terminal, and use this information to change the output style.
+For example if the output goes to a terminal the tool may add control
+characters that set color, or even change the location of the cursor.
+If the output is not going to a terminal then these special control
+characters are not emitted so that they don't corrupt log files, etc.
+
+   The '--output-sync' (*note Output During Parallel Output: Parallel
+Output.) option will defeat the terminal detection.  When output
+synchronization is enabled GNU 'make' arranges for all command output to
+be written to a file, so that its output can be written as a block
+without interference from other commands.  This means that all tools
+invoked by 'make' will believe that their output is not going to be
+displayed on a terminal, even when it will be (because 'make' will
+display it there after the command is completed).
+
+   In order to facilitate tools which would like to determine whether or
+not their output will be displayed on a terminal, GNU 'make' will set
+the 'MAKE_TERMOUT' and 'MAKE_TERMERR' environment variables before
+invoking any commands.  Tools which would like to determine whether
+standard or error output (respectively) will be displayed on a terminal
+can check these environment variables to determine if they exist and
+contain a non-empty value.  If so the tool can assume that the output
+will (eventually) be displayed on a terminal.  If the variables are not
+set or have an empty value, then the tool should fall back to its normal
+methods of detecting whether output is going to a terminal or not.
+
+   The content of the variables can be parsed to determine the type of
+terminal which will be used to display the output.
+
+   Similarly, environments which invoke 'make' and would like to capture
+the output and eventually display it on a terminal (or some display
+which can interpret terminal control characters) can set these variables
+before invoking 'make'.  GNU 'make' will not modify these environment
+variables if they already exist when it starts.
+
+\1f
+File: make.info,  Node: Features,  Next: Missing,  Prev: Integrating make,  Up: Top
+
+14 Features of GNU 'make'
 *************************
 
 Here is a summary of the features of GNU 'make', for comparison with and
@@ -2258,7 +2465,7 @@ which others.
 \1f
 File: make.info,  Node: Missing,  Next: Makefile Conventions,  Prev: Features,  Up: Top
 
-14 Incompatibilities and Missing Features
+15 Incompatibilities and Missing Features
 *****************************************
 
 The 'make' programs in various other systems support a few features that
@@ -2343,7 +2550,7 @@ features.
 \1f
 File: make.info,  Node: Makefile Conventions,  Next: Quick Reference,  Prev: Missing,  Up: Top
 
-15 Makefile Conventions
+16 Makefile Conventions
 ***********************
 
 This node describes conventions for writing the Makefiles for GNU
@@ -2365,7 +2572,7 @@ POSIX and *note Portable Make Programming: (autoconf)Portable Make.
 \1f
 File: make.info,  Node: Makefile Basics,  Next: Utilities in Makefiles,  Up: Makefile Conventions
 
-15.1 General Conventions for Makefiles
+16.1 General Conventions for Makefiles
 ======================================
 
 Every Makefile should contain this line:
@@ -2444,7 +2651,7 @@ their subtargets) work correctly with a parallel 'make'.
 \1f
 File: make.info,  Node: Utilities in Makefiles,  Next: Command Variables,  Prev: Makefile Basics,  Up: Makefile Conventions
 
-15.2 Utilities in Makefiles
+16.2 Utilities in Makefiles
 ===========================
 
 Write the Makefile commands (and any shell scripts, such as 'configure')
@@ -2503,7 +2710,7 @@ exist.
 \1f
 File: make.info,  Node: Command Variables,  Next: DESTDIR,  Prev: Utilities in Makefiles,  Up: Makefile Conventions
 
-15.3 Variables for Specifying Commands
+16.3 Variables for Specifying Commands
 ======================================
 
 Makefiles should provide variables for overriding certain commands,
@@ -2576,7 +2783,7 @@ command, with the final argument being a directory, as in:
 \1f
 File: make.info,  Node: DESTDIR,  Next: Directory Variables,  Prev: Command Variables,  Up: Makefile Conventions
 
-15.4 'DESTDIR': Support for Staged Installs
+16.4 'DESTDIR': Support for Staged Installs
 ===========================================
 
 'DESTDIR' is a variable prepended to each installed target file, like
@@ -2623,7 +2830,7 @@ absolute requirement.
 \1f
 File: make.info,  Node: Directory Variables,  Next: Standard Targets,  Prev: DESTDIR,  Up: Makefile Conventions
 
-15.5 Variables for Installation Directories
+16.5 Variables for Installation Directories
 ===========================================
 
 Installation directories should always be named by variables, so it is
@@ -2633,7 +2840,7 @@ below.  They are based on a standard file system layout; variants of it
 are used in GNU/Linux and other modern operating systems.
 
    Installers are expected to override these values when calling 'make'
-(e.g., 'make prefix=/usr install' or 'configure' (e.g., 'configure
+(e.g., 'make prefix=/usr install') or 'configure' (e.g., 'configure
 --prefix=/usr').  GNU packages should not try to guess which value
 should be appropriate for these variables on the system they are being
 installed onto: use the default settings specified here so that all GNU
@@ -2928,7 +3135,7 @@ or 'lispdir'.
      datarootdir = $(prefix)/share
      datadir = $(datarootdir)
      exec_prefix = $(prefix)
-     # Where to put the executable for the command `gcc'.
+     # Where to put the executable for the command 'gcc'.
      bindir = $(exec_prefix)/bin
      # Where to put the directories used by the compiler.
      libexecdir = $(exec_prefix)/libexec
@@ -2958,7 +3165,7 @@ supports them.
 \1f
 File: make.info,  Node: Standard Targets,  Next: Install Command Categories,  Prev: Directory Variables,  Up: Makefile Conventions
 
-15.6 Standard Targets for Users
+16.6 Standard Targets for Users
 ===============================
 
 All GNU programs should have the following targets in their Makefiles:
@@ -3022,9 +3229,9 @@ All GNU programs should have the following targets in their Makefiles:
                   $(INSTALL_DATA) $$d/foo.info \
                     "$(DESTDIR)$(infodir)/foo.info"
           # Run install-info only if it exists.
-          # Use `if' instead of just prepending `-' to the
+          # Use 'if' instead of just prepending '-' to the
           # line so we notice real errors from install-info.
-          # Use `$(SHELL) -c' because some shells do not
+          # Use '$(SHELL) -c' because some shells do not
           # fail gracefully when there is an unknown command.
                   $(POST_INSTALL)
                   if $(SHELL) -c 'install-info --version' \
@@ -3272,7 +3479,7 @@ programs in which they are useful.
 \1f
 File: make.info,  Node: Install Command Categories,  Prev: Standard Targets,  Up: Makefile Conventions
 
-15.7 Install Command Categories
+16.7 Install Command Categories
 ===============================
 
 When writing the 'install' target, you must classify all the commands
@@ -3758,9 +3965,9 @@ Variables::, for full information.
 
 'CURDIR'
 
-     Set to the pathname of the current working directory (after all
-     '-C' options are processed, if any).  Setting this variable has no
-     effect on the operation of 'make'.
+     Set to the absolute pathname of the current working directory
+     (after all '-C' options are processed, if any).  Setting this
+     variable has no effect on the operation of 'make'.
      *Note Recursive Use of 'make': Recursion.
 
 'SUFFIXES'
@@ -4655,23 +4862,23 @@ Index of Concepts
 
 * !=:                                    Setting.             (line   6)
 * !=, expansion:                         Reading Makefiles.   (line  33)
-* '#' (comments), in makefile:           Makefile Contents.   (line  41)
-* '#' (comments), in recipes:            Recipe Syntax.       (line  29)
-* '#include':                            Automatic Prerequisites.
+* # (comments), in makefile:             Makefile Contents.   (line  41)
+* # (comments), in recipes:              Recipe Syntax.       (line  29)
+* #include:                              Automatic Prerequisites.
                                                               (line  16)
-* '$', in function call:                 Syntax of Functions. (line   6)
-* '$', in rules:                         Rule Syntax.         (line  33)
-* '$', in variable name:                 Computed Names.      (line   6)
-* '$', in variable reference:            Reference.           (line   6)
-* '%', in pattern rules:                 Pattern Intro.       (line   9)
-* '%', quoting in 'patsubst':            Text Functions.      (line  26)
-* '%', quoting in static pattern:        Static Usage.        (line  37)
-* '%', quoting in 'vpath':               Selective Search.    (line  39)
-* '%', quoting with '\' (backslash):     Selective Search.    (line  39)
-* '%', quoting with '\' (backslash) <1>: Static Usage.        (line  37)
-* '%', quoting with '\' (backslash) <2>: Text Functions.      (line  26)
-* '*' (wildcard character):              Wildcards.           (line   6)
-* +, and 'define':                       Canned Recipes.      (line  49)
+* $, in function call:                   Syntax of Functions. (line   6)
+* $, in rules:                           Rule Syntax.         (line  33)
+* $, in variable name:                   Computed Names.      (line   6)
+* $, in variable reference:              Reference.           (line   6)
+* %, in pattern rules:                   Pattern Intro.       (line   9)
+* %, quoting in patsubst:                Text Functions.      (line  26)
+* %, quoting in static pattern:          Static Usage.        (line  37)
+* %, quoting in vpath:                   Selective Search.    (line  39)
+* %, quoting with \ (backslash):         Selective Search.    (line  39)
+* %, quoting with \ (backslash) <1>:     Static Usage.        (line  37)
+* %, quoting with \ (backslash) <2>:     Text Functions.      (line  26)
+* * (wildcard character):                Wildcards.           (line   6)
+* +, and define:                         Canned Recipes.      (line  49)
 * +, and recipe execution:               Instead of Execution.
                                                               (line  67)
 * +, and recipes:                        MAKE Variable.       (line  18)
@@ -4679,172 +4886,172 @@ Index of Concepts
 * +=, expansion:                         Reading Makefiles.   (line  33)
 * +=, expansion <1>:                     Reading Makefiles.   (line  33)
 * ,v (RCS file extension):               Catalogue of Rules.  (line 163)
-* '-' (in recipes):                      Errors.              (line  19)
-* -, and 'define':                       Canned Recipes.      (line  49)
-* '--always-make':                       Options Summary.     (line  15)
-* '--assume-new':                        Instead of Execution.
+* - (in recipes):                        Errors.              (line  19)
+* -, and define:                         Canned Recipes.      (line  49)
+* --always-make:                         Options Summary.     (line  15)
+* --assume-new:                          Instead of Execution.
                                                               (line  41)
-* '--assume-new' <1>:                    Options Summary.     (line 284)
-* '--assume-new', and recursion:         Options/Recursion.   (line  22)
-* '--assume-old':                        Avoiding Compilation.
+* --assume-new <1>:                      Options Summary.     (line 284)
+* --assume-new, and recursion:           Options/Recursion.   (line  22)
+* --assume-old:                          Avoiding Compilation.
                                                               (line   6)
-* '--assume-old' <1>:                    Options Summary.     (line 163)
-* '--assume-old', and recursion:         Options/Recursion.   (line  22)
-* '--check-symlink-times':               Options Summary.     (line 144)
-* '--debug':                             Options Summary.     (line  43)
-* '--directory':                         Recursion.           (line  20)
-* '--directory' <1>:                     Options Summary.     (line  26)
-* '--directory', and '--print-directory': -w Option.          (line  20)
-* '--directory', and recursion:          Options/Recursion.   (line  22)
-* '--dry-run':                           Echoing.             (line  18)
-* '--dry-run' <1>:                       Instead of Execution.
+* --assume-old <1>:                      Options Summary.     (line 163)
+* --assume-old, and recursion:           Options/Recursion.   (line  22)
+* --check-symlink-times:                 Options Summary.     (line 144)
+* --debug:                               Options Summary.     (line  43)
+* --directory:                           Recursion.           (line  20)
+* --directory <1>:                       Options Summary.     (line  26)
+* --directory, and --print-directory:    -w Option.           (line  20)
+* --directory, and recursion:            Options/Recursion.   (line  22)
+* --dry-run:                             Echoing.             (line  18)
+* --dry-run <1>:                         Instead of Execution.
                                                               (line  14)
-* '--dry-run' <2>:                       Options Summary.     (line 154)
-* '--environment-overrides':             Options Summary.     (line  85)
-* '--eval':                              Options Summary.     (line  89)
-* '--file':                              Makefile Names.      (line  23)
-* '--file' <1>:                          Makefile Arguments.  (line   6)
-* '--file' <2>:                          Options Summary.     (line  97)
-* '--file', and recursion:               Options/Recursion.   (line  22)
-* '--help':                              Options Summary.     (line 103)
-* '--ignore-errors':                     Errors.              (line  30)
-* '--ignore-errors' <1>:                 Options Summary.     (line 108)
-* '--include-dir':                       Include.             (line  53)
-* '--include-dir' <1>:                   Options Summary.     (line 113)
-* '--jobs':                              Parallel.            (line   6)
-* '--jobs' <1>:                          Options Summary.     (line 120)
-* '--jobs', and recursion:               Options/Recursion.   (line  25)
-* '--just-print':                        Echoing.             (line  18)
-* '--just-print' <1>:                    Instead of Execution.
+* --dry-run <2>:                         Options Summary.     (line 154)
+* --environment-overrides:               Options Summary.     (line  85)
+* --eval:                                Options Summary.     (line  89)
+* --file:                                Makefile Names.      (line  23)
+* --file <1>:                            Makefile Arguments.  (line   6)
+* --file <2>:                            Options Summary.     (line  97)
+* --file, and recursion:                 Options/Recursion.   (line  22)
+* --help:                                Options Summary.     (line 103)
+* --ignore-errors:                       Errors.              (line  30)
+* --ignore-errors <1>:                   Options Summary.     (line 108)
+* --include-dir:                         Include.             (line  53)
+* --include-dir <1>:                     Options Summary.     (line 113)
+* --jobs:                                Parallel.            (line   6)
+* --jobs <1>:                            Options Summary.     (line 120)
+* --jobs, and recursion:                 Options/Recursion.   (line  25)
+* --just-print:                          Echoing.             (line  18)
+* --just-print <1>:                      Instead of Execution.
                                                               (line  14)
-* '--just-print' <2>:                    Options Summary.     (line 153)
-* '--keep-going':                        Errors.              (line  47)
-* '--keep-going' <1>:                    Testing.             (line  16)
-* '--keep-going' <2>:                    Options Summary.     (line 129)
-* '--load-average':                      Parallel.            (line  35)
-* '--load-average' <1>:                  Options Summary.     (line 136)
-* '--makefile':                          Makefile Names.      (line  23)
-* '--makefile' <1>:                      Makefile Arguments.  (line   6)
-* '--makefile' <2>:                      Options Summary.     (line  98)
-* '--max-load':                          Parallel.            (line  35)
-* '--max-load' <1>:                      Options Summary.     (line 137)
-* '--new-file':                          Instead of Execution.
+* --just-print <2>:                      Options Summary.     (line 153)
+* --keep-going:                          Errors.              (line  47)
+* --keep-going <1>:                      Testing.             (line  16)
+* --keep-going <2>:                      Options Summary.     (line 129)
+* --load-average:                        Parallel.            (line  35)
+* --load-average <1>:                    Options Summary.     (line 136)
+* --makefile:                            Makefile Names.      (line  23)
+* --makefile <1>:                        Makefile Arguments.  (line   6)
+* --makefile <2>:                        Options Summary.     (line  98)
+* --max-load:                            Parallel.            (line  35)
+* --max-load <1>:                        Options Summary.     (line 137)
+* --new-file:                            Instead of Execution.
                                                               (line  41)
-* '--new-file' <1>:                      Options Summary.     (line 283)
-* '--new-file', and recursion:           Options/Recursion.   (line  22)
-* '--no-builtin-rules':                  Options Summary.     (line 209)
-* '--no-builtin-variables':              Options Summary.     (line 222)
-* '--no-keep-going':                     Options Summary.     (line 238)
-* '--no-print-directory':                -w Option.           (line  20)
-* '--no-print-directory' <1>:            Options Summary.     (line 275)
-* '--old-file':                          Avoiding Compilation.
+* --new-file <1>:                        Options Summary.     (line 283)
+* --new-file, and recursion:             Options/Recursion.   (line  22)
+* --no-builtin-rules:                    Options Summary.     (line 209)
+* --no-builtin-variables:                Options Summary.     (line 222)
+* --no-keep-going:                       Options Summary.     (line 238)
+* --no-print-directory:                  -w Option.           (line  20)
+* --no-print-directory <1>:              Options Summary.     (line 275)
+* --old-file:                            Avoiding Compilation.
                                                               (line   6)
-* '--old-file' <1>:                      Options Summary.     (line 162)
-* '--old-file', and recursion:           Options/Recursion.   (line  22)
-* '--output-sync':                       Parallel Output.     (line  11)
-* '--output-sync' <1>:                   Options Summary.     (line 171)
-* '--print-data-base':                   Options Summary.     (line 187)
-* '--print-directory':                   Options Summary.     (line 267)
-* '--print-directory', and '--directory': -w Option.          (line  20)
-* '--print-directory', and recursion:    -w Option.           (line  20)
-* '--print-directory', disabling:        -w Option.           (line  20)
-* '--question':                          Instead of Execution.
+* --old-file <1>:                        Options Summary.     (line 162)
+* --old-file, and recursion:             Options/Recursion.   (line  22)
+* --output-sync:                         Parallel Output.     (line  11)
+* --output-sync <1>:                     Options Summary.     (line 171)
+* --print-data-base:                     Options Summary.     (line 187)
+* --print-directory:                     Options Summary.     (line 267)
+* --print-directory, and --directory:    -w Option.           (line  20)
+* --print-directory, and recursion:      -w Option.           (line  20)
+* --print-directory, disabling:          -w Option.           (line  20)
+* --question:                            Instead of Execution.
                                                               (line  32)
-* '--question' <1>:                      Options Summary.     (line 201)
-* '--quiet':                             Echoing.             (line  24)
-* '--quiet' <1>:                         Options Summary.     (line 232)
-* '--recon':                             Echoing.             (line  18)
-* '--recon' <1>:                         Instead of Execution.
+* --question <1>:                        Options Summary.     (line 201)
+* --quiet:                               Echoing.             (line  24)
+* --quiet <1>:                           Options Summary.     (line 232)
+* --recon:                               Echoing.             (line  18)
+* --recon <1>:                           Instead of Execution.
                                                               (line  14)
-* '--recon' <2>:                         Options Summary.     (line 155)
-* '--silent':                            Echoing.             (line  24)
-* '--silent' <1>:                        Options Summary.     (line 231)
-* '--stop':                              Options Summary.     (line 239)
-* '--touch':                             Instead of Execution.
+* --recon <2>:                           Options Summary.     (line 155)
+* --silent:                              Echoing.             (line  24)
+* --silent <1>:                          Options Summary.     (line 231)
+* --stop:                                Options Summary.     (line 239)
+* --touch:                               Instead of Execution.
                                                               (line  24)
-* '--touch' <1>:                         Options Summary.     (line 247)
-* '--touch', and recursion:              MAKE Variable.       (line  35)
-* '--trace':                             Options Summary.     (line 254)
-* '--version':                           Options Summary.     (line 262)
-* '--warn-undefined-variables':          Options Summary.     (line 292)
-* '--what-if':                           Instead of Execution.
+* --touch <1>:                           Options Summary.     (line 247)
+* --touch, and recursion:                MAKE Variable.       (line  35)
+* --trace:                               Options Summary.     (line 254)
+* --version:                             Options Summary.     (line 262)
+* --warn-undefined-variables:            Options Summary.     (line 292)
+* --what-if:                             Instead of Execution.
                                                               (line  41)
-* '--what-if' <1>:                       Options Summary.     (line 282)
-* '-b':                                  Options Summary.     (line   9)
-* '-B':                                  Options Summary.     (line  14)
-* '-C':                                  Recursion.           (line  20)
-* '-C' <1>:                              Options Summary.     (line  25)
-* '-C', and '-w':                        -w Option.           (line  20)
-* '-C', and recursion:                   Options/Recursion.   (line  22)
-* '-d':                                  Options Summary.     (line  33)
-* '-e':                                  Options Summary.     (line  84)
-* '-e' (shell flag):                     Automatic Prerequisites.
+* --what-if <1>:                         Options Summary.     (line 282)
+* -b:                                    Options Summary.     (line   9)
+* -B:                                    Options Summary.     (line  14)
+* -C:                                    Recursion.           (line  20)
+* -C <1>:                                Options Summary.     (line  25)
+* -C, and -w:                            -w Option.           (line  20)
+* -C, and recursion:                     Options/Recursion.   (line  22)
+* -d:                                    Options Summary.     (line  33)
+* -e:                                    Options Summary.     (line  84)
+* -e (shell flag):                       Automatic Prerequisites.
                                                               (line  65)
-* '-f':                                  Makefile Names.      (line  23)
-* '-f' <1>:                              Makefile Arguments.  (line   6)
-* '-f' <2>:                              Options Summary.     (line  96)
-* '-f', and recursion:                   Options/Recursion.   (line  22)
-* '-h':                                  Options Summary.     (line 102)
-* '-I':                                  Include.             (line  53)
-* '-i':                                  Errors.              (line  30)
-* '-i' <1>:                              Options Summary.     (line 107)
-* '-I' <1>:                              Options Summary.     (line 112)
-* '-j':                                  Parallel.            (line   6)
-* '-j' <1>:                              Options Summary.     (line 119)
-* '-j', and archive update:              Archive Pitfalls.    (line   6)
-* '-j', and recursion:                   Options/Recursion.   (line  25)
-* '-k':                                  Errors.              (line  47)
-* '-k' <1>:                              Testing.             (line  16)
-* '-k' <2>:                              Options Summary.     (line 128)
-* '-l':                                  Options Summary.     (line 135)
-* '-L':                                  Options Summary.     (line 143)
-* '-l' (library search):                 Libraries/Search.    (line   6)
-* '-l' (load average):                   Parallel.            (line  35)
-* '-m':                                  Options Summary.     (line  10)
-* '-M' (to compiler):                    Automatic Prerequisites.
+* -f:                                    Makefile Names.      (line  23)
+* -f <1>:                                Makefile Arguments.  (line   6)
+* -f <2>:                                Options Summary.     (line  96)
+* -f, and recursion:                     Options/Recursion.   (line  22)
+* -h:                                    Options Summary.     (line 102)
+* -I:                                    Include.             (line  53)
+* -i:                                    Errors.              (line  30)
+* -i <1>:                                Options Summary.     (line 107)
+* -I <1>:                                Options Summary.     (line 112)
+* -j:                                    Parallel.            (line   6)
+* -j <1>:                                Options Summary.     (line 119)
+* -j, and archive update:                Archive Pitfalls.    (line   6)
+* -j, and recursion:                     Options/Recursion.   (line  25)
+* -k:                                    Errors.              (line  47)
+* -k <1>:                                Testing.             (line  16)
+* -k <2>:                                Options Summary.     (line 128)
+* -l:                                    Options Summary.     (line 135)
+* -L:                                    Options Summary.     (line 143)
+* -l (library search):                   Libraries/Search.    (line   6)
+* -l (load average):                     Parallel.            (line  35)
+* -m:                                    Options Summary.     (line  10)
+* -M (to compiler):                      Automatic Prerequisites.
                                                               (line  18)
-* '-MM' (to GNU compiler):               Automatic Prerequisites.
+* -MM (to GNU compiler):                 Automatic Prerequisites.
                                                               (line  67)
-* '-n':                                  Echoing.             (line  18)
-* '-n' <1>:                              Instead of Execution.
+* -n:                                    Echoing.             (line  18)
+* -n <1>:                                Instead of Execution.
                                                               (line  14)
-* '-n' <2>:                              Options Summary.     (line 152)
-* '-O':                                  Parallel Output.     (line  11)
-* '-o':                                  Avoiding Compilation.
+* -n <2>:                                Options Summary.     (line 152)
+* -O:                                    Parallel Output.     (line  11)
+* -o:                                    Avoiding Compilation.
                                                               (line   6)
-* '-o' <1>:                              Options Summary.     (line 161)
-* '-O' <1>:                              Options Summary.     (line 170)
-* '-o', and recursion:                   Options/Recursion.   (line  22)
-* '-p':                                  Options Summary.     (line 186)
-* '-q':                                  Instead of Execution.
+* -o <1>:                                Options Summary.     (line 161)
+* -O <1>:                                Options Summary.     (line 170)
+* -o, and recursion:                     Options/Recursion.   (line  22)
+* -p:                                    Options Summary.     (line 186)
+* -q:                                    Instead of Execution.
                                                               (line  32)
-* '-q' <1>:                              Options Summary.     (line 200)
-* '-r':                                  Options Summary.     (line 208)
-* '-R':                                  Options Summary.     (line 221)
-* '-s':                                  Echoing.             (line  24)
-* '-s' <1>:                              Options Summary.     (line 230)
-* '-S':                                  Options Summary.     (line 237)
-* '-t':                                  Instead of Execution.
+* -q <1>:                                Options Summary.     (line 200)
+* -r:                                    Options Summary.     (line 208)
+* -R:                                    Options Summary.     (line 221)
+* -s:                                    Echoing.             (line  24)
+* -s <1>:                                Options Summary.     (line 230)
+* -S:                                    Options Summary.     (line 237)
+* -t:                                    Instead of Execution.
                                                               (line  24)
-* '-t' <1>:                              Options Summary.     (line 246)
-* '-t', and recursion:                   MAKE Variable.       (line  35)
-* '-v':                                  Options Summary.     (line 261)
-* '-W':                                  Instead of Execution.
+* -t <1>:                                Options Summary.     (line 246)
+* -t, and recursion:                     MAKE Variable.       (line  35)
+* -v:                                    Options Summary.     (line 261)
+* -W:                                    Instead of Execution.
                                                               (line  41)
-* '-w':                                  Options Summary.     (line 266)
-* '-W' <1>:                              Options Summary.     (line 281)
-* '-w', and '-C':                        -w Option.           (line  20)
-* '-W', and recursion:                   Options/Recursion.   (line  22)
-* '-w', and recursion:                   -w Option.           (line  20)
-* '-w', disabling:                       -w Option.           (line  20)
-* '.a' (archives):                       Archive Suffix Rules.
+* -w:                                    Options Summary.     (line 266)
+* -W <1>:                                Options Summary.     (line 281)
+* -w, and -C:                            -w Option.           (line  20)
+* -W, and recursion:                     Options/Recursion.   (line  22)
+* -w, and recursion:                     -w Option.           (line  20)
+* -w, disabling:                         -w Option.           (line  20)
+* .a (archives):                         Archive Suffix Rules.
                                                               (line   6)
 * .c:                                    Catalogue of Rules.  (line  35)
 * .C:                                    Catalogue of Rules.  (line  39)
 * .cc:                                   Catalogue of Rules.  (line  39)
 * .ch:                                   Catalogue of Rules.  (line 149)
 * .cpp:                                  Catalogue of Rules.  (line  39)
-* '.d':                                  Automatic Prerequisites.
+* .d:                                    Automatic Prerequisites.
                                                               (line  80)
 * .def:                                  Catalogue of Rules.  (line  71)
 * .dvi:                                  Catalogue of Rules.  (line 149)
@@ -4852,19 +5059,19 @@ Index of Concepts
 * .F:                                    Catalogue of Rules.  (line  49)
 * .info:                                 Catalogue of Rules.  (line 156)
 * .l:                                    Catalogue of Rules.  (line 121)
-* '.LIBPATTERNS', and link libraries:    Libraries/Search.    (line   6)
+* .LIBPATTERNS, and link libraries:      Libraries/Search.    (line   6)
 * .ln:                                   Catalogue of Rules.  (line 143)
 * .mod:                                  Catalogue of Rules.  (line  71)
 * .o:                                    Catalogue of Rules.  (line  35)
 * .o <1>:                                Catalogue of Rules.  (line  83)
-* '.ONESHELL', use of:                   One Shell.           (line   6)
+* .ONESHELL, use of:                     One Shell.           (line   6)
 * .p:                                    Catalogue of Rules.  (line  45)
-* '.PRECIOUS' intermediate files:        Chained Rules.       (line  56)
+* .PRECIOUS intermediate files:          Chained Rules.       (line  56)
 * .r:                                    Catalogue of Rules.  (line  49)
 * .s:                                    Catalogue of Rules.  (line  76)
 * .S:                                    Catalogue of Rules.  (line  79)
 * .sh:                                   Catalogue of Rules.  (line 178)
-* '.SHELLFLAGS', value of:               Choosing the Shell.  (line   6)
+* .SHELLFLAGS, value of:                 Choosing the Shell.  (line   6)
 * .sym:                                  Catalogue of Rules.  (line  71)
 * .tex:                                  Catalogue of Rules.  (line 149)
 * .texi:                                 Catalogue of Rules.  (line 156)
@@ -4873,7 +5080,7 @@ Index of Concepts
 * .w:                                    Catalogue of Rules.  (line 149)
 * .web:                                  Catalogue of Rules.  (line 149)
 * .y:                                    Catalogue of Rules.  (line 117)
-* '::' rules (double-colon):             Double-Colon.        (line   6)
+* :: rules (double-colon):               Double-Colon.        (line   6)
 * ::=:                                   Flavors.             (line  56)
 * ::= <1>:                               Setting.             (line   6)
 * :=:                                    Flavors.             (line  56)
@@ -4881,30 +5088,30 @@ Index of Concepts
 * =:                                     Flavors.             (line  10)
 * = <1>:                                 Setting.             (line   6)
 * =, expansion:                          Reading Makefiles.   (line  33)
-* '?' (wildcard character):              Wildcards.           (line   6)
+* ? (wildcard character):                Wildcards.           (line   6)
 * ?=:                                    Flavors.             (line 135)
 * ?= <1>:                                Setting.             (line   6)
 * ?=, expansion:                         Reading Makefiles.   (line  33)
-* '@' (in recipes):                      Echoing.             (line   6)
-* @, and 'define':                       Canned Recipes.      (line  49)
-* '[...]' (wildcard characters):         Wildcards.           (line   6)
-* '\' (backslash), for continuation lines: Simple Makefile.   (line  41)
-* '\' (backslash), in recipes:           Splitting Recipe Lines.
+* @ (in recipes):                        Echoing.             (line   6)
+* @, and define:                         Canned Recipes.      (line  49)
+* [...] (wildcard characters):           Wildcards.           (line   6)
+* \ (backslash), for continuation lines: Simple Makefile.     (line  41)
+* \ (backslash), in recipes:             Splitting Recipe Lines.
                                                               (line   6)
-* '\' (backslash), to quote '%':         Selective Search.    (line  39)
-* '\' (backslash), to quote '%' <1>:     Static Usage.        (line  37)
-* '\' (backslash), to quote '%' <2>:     Text Functions.      (line  26)
-* '__.SYMDEF':                           Archive Symbols.     (line   6)
-* '~' (tilde):                           Wildcards.           (line  11)
+* \ (backslash), to quote %:             Selective Search.    (line  39)
+* \ (backslash), to quote % <1>:         Static Usage.        (line  37)
+* \ (backslash), to quote % <2>:         Text Functions.      (line  26)
+* __.SYMDEF:                             Archive Symbols.     (line   6)
+* ~ (tilde):                             Wildcards.           (line  11)
 * abspath:                               File Name Functions. (line 120)
 * algorithm for directory search:        Search Algorithm.    (line   6)
-* 'all' (standard target):               Goals.               (line  73)
+* all (standard target):                 Goals.               (line  73)
 * appending to variables:                Appending.           (line   6)
 * ar:                                    Implicit Variables.  (line  40)
 * archive:                               Archives.            (line   6)
 * archive member targets:                Archive Members.     (line   6)
 * archive symbol directory updating:     Archive Symbols.     (line   6)
-* archive, and '-j':                     Archive Pitfalls.    (line   6)
+* archive, and -j:                       Archive Pitfalls.    (line   6)
 * archive, and parallel execution:       Archive Pitfalls.    (line   6)
 * archive, suffix rule for:              Archive Suffix Rules.
                                                               (line   6)
@@ -4919,13 +5126,13 @@ Index of Concepts
 * automatic variables:                   Automatic Variables. (line   6)
 * automatic variables in prerequisites:  Automatic Variables. (line  17)
 * backquotes:                            Shell Function.      (line   6)
-* backslash ('\'), for continuation lines: Simple Makefile.   (line  41)
-* backslash ('\'), in recipes:           Splitting Recipe Lines.
+* backslash (\), for continuation lines: Simple Makefile.     (line  41)
+* backslash (\), in recipes:             Splitting Recipe Lines.
                                                               (line   6)
-* backslash ('\'), to quote '%':         Selective Search.    (line  39)
-* backslash ('\'), to quote '%' <1>:     Static Usage.        (line  37)
-* backslash ('\'), to quote '%' <2>:     Text Functions.      (line  26)
-* backslash ('\'), to quote newlines:    Splitting Lines.     (line   6)
+* backslash (\), to quote %:             Selective Search.    (line  39)
+* backslash (\), to quote % <1>:         Static Usage.        (line  37)
+* backslash (\), to quote % <2>:         Text Functions.      (line  26)
+* backslash (\), to quote newlines:      Splitting Lines.     (line   6)
 * backslashes in pathnames and wildcard expansion: Wildcard Pitfall.
                                                               (line  31)
 * basename:                              File Name Functions. (line  56)
@@ -4939,15 +5146,15 @@ Index of Concepts
 * canned recipes:                        Canned Recipes.      (line   6)
 * cc:                                    Catalogue of Rules.  (line  35)
 * cc <1>:                                Implicit Variables.  (line  46)
-* 'cd' (shell command):                  Execution.           (line  12)
-* 'cd' (shell command) <1>:              MAKE Variable.       (line  16)
+* cd (shell command):                    Execution.           (line  12)
+* cd (shell command) <1>:                MAKE Variable.       (line  16)
 * chains of rules:                       Chained Rules.       (line   6)
-* 'check' (standard target):             Goals.               (line 115)
-* 'clean' (standard target):             Goals.               (line  76)
-* 'clean' target:                        Simple Makefile.     (line  85)
-* 'clean' target <1>:                    Cleanup.             (line  11)
+* check (standard target):               Goals.               (line 115)
+* clean (standard target):               Goals.               (line  76)
+* clean target:                          Simple Makefile.     (line  85)
+* clean target <1>:                      Cleanup.             (line  11)
 * cleaning up:                           Cleanup.             (line   6)
-* 'clobber' (standard target):           Goals.               (line  87)
+* clobber (standard target):             Goals.               (line  87)
 * co:                                    Catalogue of Rules.  (line 163)
 * co <1>:                                Implicit Variables.  (line  66)
 * combining rules by prerequisite:       Combine By Prerequisite.
@@ -4977,7 +5184,7 @@ Index of Concepts
 * ctangle <1>:                           Implicit Variables.  (line 103)
 * cweave:                                Catalogue of Rules.  (line 149)
 * cweave <1>:                            Implicit Variables.  (line  97)
-* data base of 'make' rules:             Options Summary.     (line 187)
+* data base of make rules:               Options Summary.     (line 187)
 * deducing recipes (implicit rules):     make Deduces.        (line   6)
 * default directories for included makefiles: Include.        (line  53)
 * default goal:                          How Make Works.      (line  11)
@@ -4993,32 +5200,32 @@ Index of Concepts
 * directories, printing them:            -w Option.           (line   6)
 * directories, updating archive symbol:  Archive Symbols.     (line   6)
 * directory part:                        File Name Functions. (line  16)
-* directory search ('VPATH'):            Directory Search.    (line   6)
-* directory search ('VPATH'), and implicit rules: Implicit/Search.
+* directory search (VPATH):              Directory Search.    (line   6)
+* directory search (VPATH), and implicit rules: Implicit/Search.
                                                               (line   6)
-* directory search ('VPATH'), and link libraries: Libraries/Search.
+* directory search (VPATH), and link libraries: Libraries/Search.
                                                               (line   6)
-* directory search ('VPATH'), and recipes: Recipes/Search.    (line   6)
+* directory search (VPATH), and recipes: Recipes/Search.      (line   6)
 * directory search algorithm:            Search Algorithm.    (line   6)
 * directory search, traditional (GPATH): Search Algorithm.    (line  42)
-* 'dist' (standard target):              Goals.               (line 107)
-* 'distclean' (standard target):         Goals.               (line  85)
-* dollar sign ('$'), in function call:   Syntax of Functions. (line   6)
-* dollar sign ('$'), in rules:           Rule Syntax.         (line  33)
-* dollar sign ('$'), in variable name:   Computed Names.      (line   6)
-* dollar sign ('$'), in variable reference: Reference.        (line   6)
+* dist (standard target):                Goals.               (line 107)
+* distclean (standard target):           Goals.               (line  85)
+* dollar sign ($), in function call:     Syntax of Functions. (line   6)
+* dollar sign ($), in rules:             Rule Syntax.         (line  33)
+* dollar sign ($), in variable name:     Computed Names.      (line   6)
+* dollar sign ($), in variable reference: Reference.          (line   6)
 * DOS, choosing a shell in:              Choosing the Shell.  (line  38)
 * double-colon rules:                    Double-Colon.        (line   6)
 * duplicate words, removing:             Text Functions.      (line 155)
 * E2BIG:                                 Options/Recursion.   (line  58)
 * echoing of recipes:                    Echoing.             (line   6)
 * editor:                                Introduction.        (line  22)
-* Emacs ('M-x compile'):                 Errors.              (line  62)
+* Emacs (M-x compile):                   Errors.              (line  62)
 * empty recipes:                         Empty Recipes.       (line   6)
 * empty targets:                         Empty Targets.       (line   6)
 * environment:                           Environment.         (line   6)
 * environment, and recursion:            Variables/Recursion. (line   6)
-* environment, 'SHELL' in:               Choosing the Shell.  (line  12)
+* environment, SHELL in:                 Choosing the Shell.  (line  12)
 * error, stopping on:                    Make Control Functions.
                                                               (line  11)
 * errors (in recipes):                   Errors.              (line   6)
@@ -5046,7 +5253,7 @@ Index of Concepts
 * f77 <1>:                               Implicit Variables.  (line  57)
 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
                                                               (line   6)
-* features of GNU 'make':                Features.            (line   6)
+* features of GNU make:                  Features.            (line   6)
 * features, missing:                     Missing.             (line   6)
 * file name functions:                   File Name Functions. (line   6)
 * file name of makefile:                 Makefile Names.      (line   6)
@@ -5060,6 +5267,7 @@ Index of Concepts
 * file name, directory part:             File Name Functions. (line  16)
 * file name, nondirectory part:          File Name Functions. (line  26)
 * file name, realpath of:                File Name Functions. (line 113)
+* file, reading from:                    File Function.       (line   6)
 * file, writing to:                      File Function.       (line   6)
 * files, assuming new:                   Instead of Execution.
                                                               (line  41)
@@ -5075,7 +5283,7 @@ Index of Concepts
 * flags for compilers:                   Implicit Variables.  (line   6)
 * flavor of variable:                    Flavor Function.     (line   6)
 * flavors of variables:                  Flavors.             (line   6)
-* 'FORCE':                               Force Targets.       (line   6)
+* FORCE:                                 Force Targets.       (line   6)
 * force targets:                         Force Targets.       (line   6)
 * Fortran, rule to compile:              Catalogue of Rules.  (line  49)
 * functions:                             Functions.           (line   6)
@@ -5110,7 +5318,7 @@ Index of Concepts
 * ifneq, expansion:                      Reading Makefiles.   (line  82)
 * implicit rule:                         Implicit Rules.      (line   6)
 * implicit rule, and directory search:   Implicit/Search.     (line   6)
-* implicit rule, and 'VPATH':            Implicit/Search.     (line   6)
+* implicit rule, and VPATH:              Implicit/Search.     (line   6)
 * implicit rule, definition of:          Makefile Contents.   (line  16)
 * implicit rule, expansion:              Reading Makefiles.   (line  92)
 * implicit rule, how to use:             Using Implicit.      (line   6)
@@ -5121,15 +5329,15 @@ Index of Concepts
 * implicit rules, secondary expansion of: Secondary Expansion.
                                                               (line 144)
 * included makefiles, default directories: Include.           (line  53)
-* including ('MAKEFILES' variable):      MAKEFILES Variable.  (line   6)
-* including ('MAKEFILE_LIST' variable):  Special Variables.   (line   8)
+* including (MAKEFILES variable):        MAKEFILES Variable.  (line   6)
+* including (MAKEFILE_LIST variable):    Special Variables.   (line   8)
 * including other makefiles:             Include.             (line   6)
 * incompatibilities:                     Missing.             (line   6)
 * Info, rule to format:                  Catalogue of Rules.  (line 156)
 * inheritance, suppressing:              Suppressing Inheritance.
                                                               (line   6)
 * input during parallel execution:       Parallel Input.      (line   6)
-* 'install' (standard target):           Goals.               (line  93)
+* install (standard target):             Goals.               (line  93)
 * installation directories, creating:    Directory Variables. (line  20)
 * installations, staged:                 DESTDIR.             (line   6)
 * interface for loaded objects:          Loaded Object API.   (line   6)
@@ -5139,7 +5347,11 @@ Index of Concepts
 * interrupt:                             Interrupts.          (line   6)
 * job slots:                             Parallel.            (line   6)
 * job slots, and recursion:              Options/Recursion.   (line  25)
+* job slots, sharing:                    Job Slots.           (line   6)
 * jobs, limiting based on load:          Parallel.            (line  35)
+* jobserver:                             Job Slots.           (line  16)
+* jobserver on POSIX:                    POSIX Jobserver.     (line   6)
+* jobserver on Windows:                  Windows Jobserver.   (line   6)
 * joining lists of words:                File Name Functions. (line  89)
 * killing (interruption):                Interrupts.          (line   6)
 * last-resort default rules:             Last Resort.         (line   6)
@@ -5156,7 +5368,7 @@ Index of Concepts
 * linking, predefined rule for:          Catalogue of Rules.  (line  83)
 * lint:                                  Catalogue of Rules.  (line 143)
 * lint <1>:                              Implicit Variables.  (line  80)
-* 'lint', rule to run:                   Catalogue of Rules.  (line 143)
+* lint, rule to run:                     Catalogue of Rules.  (line 143)
 * list of all prerequisites:             Automatic Variables. (line  61)
 * list of changed prerequisites:         Automatic Variables. (line  51)
 * load average:                          Parallel.            (line  35)
@@ -5170,14 +5382,15 @@ Index of Concepts
                                                               (line   6)
 * long lines, splitting:                 Splitting Lines.     (line   6)
 * loops in variable expansion:           Flavors.             (line  44)
-* 'lpr' (shell command):                 Wildcard Examples.   (line  21)
-* 'lpr' (shell command) <1>:             Empty Targets.       (line  25)
+* lpr (shell command):                   Wildcard Examples.   (line  21)
+* lpr (shell command) <1>:               Empty Targets.       (line  25)
 * m2c:                                   Catalogue of Rules.  (line  71)
 * m2c <1>:                               Implicit Variables.  (line  60)
 * macro:                                 Using Variables.     (line  10)
-* 'make depend':                         Automatic Prerequisites.
+* make depend:                           Automatic Prerequisites.
                                                               (line  37)
 * make extensions:                       Extending make.      (line   6)
+* make integration:                      Integrating make.    (line   6)
 * make interface to guile:               Guile Interface.     (line   6)
 * make procedures in guile:              Guile Interface.     (line   6)
 * makefile:                              Introduction.        (line   7)
@@ -5185,10 +5398,10 @@ Index of Concepts
 * makefile name, how to specify:         Makefile Names.      (line  31)
 * makefile rule parts:                   Rule Introduction.   (line   6)
 * makefile syntax, evaluating:           Eval Function.       (line   6)
-* makefile, and 'MAKEFILES' variable:    MAKEFILES Variable.  (line   6)
+* makefile, and MAKEFILES variable:      MAKEFILES Variable.  (line   6)
 * makefile, conventions for:             Makefile Conventions.
                                                               (line   6)
-* makefile, how 'make' processes:        How Make Works.      (line   6)
+* makefile, how make processes:          How Make Works.      (line   6)
 * makefile, how to write:                Makefiles.           (line   6)
 * makefile, including:                   Include.             (line   6)
 * makefile, overriding:                  Overriding Makefiles.
@@ -5196,7 +5409,7 @@ Index of Concepts
 * makefile, parsing:                     Reading Makefiles.   (line   6)
 * makefile, remaking of:                 Remaking Makefiles.  (line   6)
 * makefile, simple:                      Simple Makefile.     (line   6)
-* makefiles, and 'MAKEFILE_LIST' variable: Special Variables. (line   8)
+* makefiles, and MAKEFILE_LIST variable: Special Variables.   (line   8)
 * makefiles, and special variables:      Special Variables.   (line   6)
 * makeinfo:                              Catalogue of Rules.  (line 156)
 * makeinfo <1>:                          Implicit Variables.  (line  84)
@@ -5208,10 +5421,10 @@ Index of Concepts
 * mistakes with wildcards:               Wildcard Pitfall.    (line   6)
 * modified variable reference:           Substitution Refs.   (line   6)
 * Modula-2, rule to compile:             Catalogue of Rules.  (line  71)
-* 'mostlyclean' (standard target):       Goals.               (line  79)
+* mostlyclean (standard target):         Goals.               (line  79)
 * multi-line variable definition:        Multi-Line.          (line   6)
 * multiple rules for one target:         Multiple Rules.      (line   6)
-* multiple rules for one target ('::'):  Double-Colon.        (line   6)
+* multiple rules for one target (::):    Double-Colon.        (line   6)
 * multiple targets:                      Multiple Targets.    (line   6)
 * multiple targets, in pattern rule:     Pattern Intro.       (line  53)
 * name of makefile:                      Makefile Names.      (line   6)
@@ -5222,13 +5435,13 @@ Index of Concepts
                                                               (line   6)
 * nondirectory part:                     File Name Functions. (line  26)
 * normal prerequisites:                  Prerequisite Types.  (line   6)
-* 'obj':                                 Variables Simplify.  (line  20)
-* 'OBJ':                                 Variables Simplify.  (line  20)
-* 'objects':                             Variables Simplify.  (line  14)
-* 'OBJECTS':                             Variables Simplify.  (line  20)
+* obj:                                   Variables Simplify.  (line  20)
+* OBJ:                                   Variables Simplify.  (line  20)
+* objects:                               Variables Simplify.  (line  14)
+* OBJECTS:                               Variables Simplify.  (line  20)
 * objects, loaded:                       Loading Objects.     (line   6)
-* 'objs':                                Variables Simplify.  (line  20)
-* 'OBJS':                                Variables Simplify.  (line  20)
+* objs:                                  Variables Simplify.  (line  20)
+* OBJS:                                  Variables Simplify.  (line  20)
 * old-fashioned suffix rules:            Suffix Rules.        (line   6)
 * options:                               Options Summary.     (line   6)
 * options, and recursion:                Options/Recursion.   (line   6)
@@ -5242,13 +5455,14 @@ Index of Concepts
 * overriding makefiles:                  Overriding Makefiles.
                                                               (line   6)
 * overriding variables with arguments:   Overriding.          (line   6)
-* overriding with 'override':            Override Directive.  (line   6)
+* overriding with override:              Override Directive.  (line   6)
 * parallel execution:                    Parallel.            (line   6)
 * parallel execution, and archive update: Archive Pitfalls.   (line   6)
 * parallel execution, input during:      Parallel Input.      (line   6)
 * parallel execution, output during:     Parallel Output.     (line   6)
 * parallel execution, output during <1>: Options Summary.     (line 171)
 * parallel execution, overriding:        Special Targets.     (line 142)
+* parallel output to terminal:           Terminal Output.     (line   6)
 * parts of makefile rule:                Rule Introduction.   (line   6)
 * Pascal, rule to compile:               Catalogue of Rules.  (line  45)
 * pattern rule:                          Pattern Intro.       (line   6)
@@ -5293,12 +5507,12 @@ Index of Concepts
 * prerequisites, order-only:             Prerequisite Types.  (line   6)
 * prerequisites, varying (static pattern): Static Pattern.    (line   6)
 * preserving intermediate files:         Chained Rules.       (line  46)
-* preserving with '.PRECIOUS':           Special Targets.     (line  32)
-* preserving with '.PRECIOUS' <1>:       Chained Rules.       (line  56)
-* preserving with '.SECONDARY':          Special Targets.     (line  54)
-* 'print' (standard target):             Goals.               (line  98)
-* 'print' target:                        Wildcard Examples.   (line  21)
-* 'print' target <1>:                    Empty Targets.       (line  25)
+* preserving with .PRECIOUS:             Special Targets.     (line  32)
+* preserving with .PRECIOUS <1>:         Chained Rules.       (line  56)
+* preserving with .SECONDARY:            Special Targets.     (line  54)
+* print (standard target):               Goals.               (line  98)
+* print target:                          Wildcard Examples.   (line  21)
+* print target <1>:                      Empty Targets.       (line  25)
 * printing directories:                  -w Option.           (line   6)
 * printing messages:                     Make Control Functions.
                                                               (line  43)
@@ -5310,17 +5524,18 @@ Index of Concepts
 * processing a makefile:                 How Make Works.      (line   6)
 * question mode:                         Instead of Execution.
                                                               (line  32)
-* quoting '%', in 'patsubst':            Text Functions.      (line  26)
-* quoting '%', in static pattern:        Static Usage.        (line  37)
-* quoting '%', in 'vpath':               Selective Search.    (line  39)
+* quoting %, in patsubst:                Text Functions.      (line  26)
+* quoting %, in static pattern:          Static Usage.        (line  37)
+* quoting %, in vpath:                   Selective Search.    (line  39)
 * quoting newline, in makefile:          Simple Makefile.     (line  41)
 * quoting newline, in recipes:           Splitting Recipe Lines.
                                                               (line   6)
 * Ratfor, rule to compile:               Catalogue of Rules.  (line  49)
 * RCS, rule to extract from:             Catalogue of Rules.  (line 163)
+* reading from a file:                   File Function.       (line   6)
 * reading makefiles:                     Reading Makefiles.   (line   6)
-* 'README':                              Makefile Names.      (line   9)
-* 'realclean' (standard target):         Goals.               (line  86)
+* README:                                Makefile Names.      (line   9)
+* realclean (standard target):           Goals.               (line  86)
 * realpath:                              File Name Functions. (line 113)
 * recipe:                                Simple Makefile.     (line  74)
 * recipe execution, single invocation:   Special Targets.     (line 150)
@@ -5331,7 +5546,7 @@ Index of Concepts
 * recipes <1>:                           Recipes.             (line   6)
 * recipes setting shell variables:       Execution.           (line  12)
 * recipes, and directory search:         Recipes/Search.      (line   6)
-* recipes, backslash ('\') in:           Splitting Recipe Lines.
+* recipes, backslash (\) in:             Splitting Recipe Lines.
                                                               (line   6)
 * recipes, canned:                       Canned Recipes.      (line   6)
 * recipes, comments in:                  Recipe Syntax.       (line  29)
@@ -5354,18 +5569,18 @@ Index of Concepts
                                                               (line   6)
 * recording events with empty targets:   Empty Targets.       (line   6)
 * recursion:                             Recursion.           (line   6)
-* recursion, and '-C':                   Options/Recursion.   (line  22)
-* recursion, and '-f':                   Options/Recursion.   (line  22)
-* recursion, and '-j':                   Options/Recursion.   (line  25)
-* recursion, and '-o':                   Options/Recursion.   (line  22)
-* recursion, and '-t':                   MAKE Variable.       (line  35)
-* recursion, and '-W':                   Options/Recursion.   (line  22)
-* recursion, and '-w':                   -w Option.           (line  20)
+* recursion, and -C:                     Options/Recursion.   (line  22)
+* recursion, and -f:                     Options/Recursion.   (line  22)
+* recursion, and -j:                     Options/Recursion.   (line  25)
+* recursion, and -o:                     Options/Recursion.   (line  22)
+* recursion, and -t:                     MAKE Variable.       (line  35)
+* recursion, and -W:                     Options/Recursion.   (line  22)
+* recursion, and -w:                     -w Option.           (line  20)
 * recursion, and command line variable definitions: Options/Recursion.
                                                               (line  17)
 * recursion, and environment:            Variables/Recursion. (line   6)
-* recursion, and 'MAKE' variable:        MAKE Variable.       (line   6)
-* recursion, and 'MAKEFILES' variable:   MAKEFILES Variable.  (line  15)
+* recursion, and MAKE variable:          MAKE Variable.       (line   6)
+* recursion, and MAKEFILES variable:     MAKEFILES Variable.  (line  15)
 * recursion, and options:                Options/Recursion.   (line   6)
 * recursion, and printing directories:   -w Option.           (line   6)
 * recursion, and variables:              Variables/Recursion. (line   6)
@@ -5386,19 +5601,19 @@ Index of Concepts
 * removing, to clean up:                 Cleanup.             (line   6)
 * reporting bugs:                        Bugs.                (line   6)
 * rm:                                    Implicit Variables.  (line 106)
-* 'rm' (shell command):                  Simple Makefile.     (line  85)
-* 'rm' (shell command) <1>:              Wildcard Examples.   (line  12)
-* 'rm' (shell command) <2>:              Phony Targets.       (line  20)
-* 'rm' (shell command) <3>:              Errors.              (line  27)
+* rm (shell command):                    Simple Makefile.     (line  85)
+* rm (shell command) <1>:                Wildcard Examples.   (line  12)
+* rm (shell command) <2>:                Phony Targets.       (line  20)
+* rm (shell command) <3>:                Errors.              (line  27)
 * rule prerequisites:                    Rule Syntax.         (line  47)
 * rule syntax:                           Rule Syntax.         (line   6)
 * rule targets:                          Rule Syntax.         (line  18)
-* rule, double-colon ('::'):             Double-Colon.        (line   6)
+* rule, double-colon (::):               Double-Colon.        (line   6)
 * rule, explicit, definition of:         Makefile Contents.   (line  10)
 * rule, how to write:                    Rules.               (line   6)
 * rule, implicit:                        Implicit Rules.      (line   6)
 * rule, implicit, and directory search:  Implicit/Search.     (line   6)
-* rule, implicit, and 'VPATH':           Implicit/Search.     (line   6)
+* rule, implicit, and VPATH:             Implicit/Search.     (line   6)
 * rule, implicit, chains of:             Chained Rules.       (line   6)
 * rule, implicit, definition of:         Makefile Contents.   (line  16)
 * rule, implicit, how to use:            Using Implicit.      (line   6)
@@ -5412,15 +5627,15 @@ Index of Concepts
 * rule, static pattern versus implicit:  Static versus Implicit.
                                                               (line   6)
 * rule, with multiple targets:           Multiple Targets.    (line   6)
-* rules, and '$':                        Rule Syntax.         (line  33)
+* rules, and $:                          Rule Syntax.         (line  33)
 * s. (SCCS file prefix):                 Catalogue of Rules.  (line 172)
 * SCCS, rule to extract from:            Catalogue of Rules.  (line 172)
 * search algorithm, implicit rule:       Implicit Rule Search.
                                                               (line   6)
-* search path for prerequisites ('VPATH'): Directory Search.  (line   6)
-* search path for prerequisites ('VPATH'), and implicit rules: Implicit/Search.
+* search path for prerequisites (VPATH): Directory Search.    (line   6)
+* search path for prerequisites (VPATH), and implicit rules: Implicit/Search.
                                                               (line   6)
-* search path for prerequisites ('VPATH'), and link libraries: Libraries/Search.
+* search path for prerequisites (VPATH), and link libraries: Libraries/Search.
                                                               (line   6)
 * searching for strings:                 Text Functions.      (line 104)
 * secondary expansion:                   Secondary Expansion. (line   6)
@@ -5432,7 +5647,7 @@ Index of Concepts
                                                               (line 136)
 * secondary files:                       Chained Rules.       (line  46)
 * secondary targets:                     Special Targets.     (line  54)
-* 'sed' (shell command):                 Automatic Prerequisites.
+* sed (shell command):                   Automatic Prerequisites.
                                                               (line  72)
 * selecting a word:                      Text Functions.      (line 159)
 * selecting word lists:                  Text Functions.      (line 168)
@@ -5442,17 +5657,17 @@ Index of Concepts
 * setting variables:                     Setting.             (line   6)
 * several rules for one target:          Multiple Rules.      (line   6)
 * several targets in a rule:             Multiple Targets.    (line   6)
-* 'shar' (standard target):              Goals.               (line 104)
+* shar (standard target):                Goals.               (line 104)
 * shell command, function for:           Shell Function.      (line   6)
-* shell file name pattern (in 'include'): Include.            (line  13)
+* shell file name pattern (in include):  Include.             (line  13)
 * shell variables, setting in recipes:   Execution.           (line  12)
-* shell wildcards (in 'include'):        Include.             (line  13)
+* shell wildcards (in include):          Include.             (line  13)
 * shell, choosing the:                   Choosing the Shell.  (line   6)
 * SHELL, exported value:                 Variables/Recursion. (line  23)
 * SHELL, import from environment:        Environment.         (line  37)
 * shell, in DOS and Windows:             Choosing the Shell.  (line  38)
-* 'SHELL', MS-DOS specifics:             Choosing the Shell.  (line  44)
-* 'SHELL', value of:                     Choosing the Shell.  (line   6)
+* SHELL, MS-DOS specifics:               Choosing the Shell.  (line  44)
+* SHELL, value of:                       Choosing the Shell.  (line   6)
 * signal:                                Interrupts.          (line   6)
 * silent operation:                      Echoing.             (line   6)
 * simple makefile:                       Simple Makefile.     (line   6)
@@ -5487,7 +5702,7 @@ Index of Concepts
                                                               (line  11)
 * strings, searching for:                Text Functions.      (line 104)
 * stripping whitespace:                  Text Functions.      (line  80)
-* sub-'make':                            Variables/Recursion. (line   6)
+* sub-make:                              Variables/Recursion. (line   6)
 * subdirectories, recursion for:         Recursion.           (line   6)
 * substitution variable reference:       Substitution Refs.   (line   6)
 * suffix rule:                           Suffix Rules.        (line   6)
@@ -5504,10 +5719,10 @@ Index of Concepts
 * syntax of rules:                       Rule Syntax.         (line   6)
 * tab character (in commands):           Rule Syntax.         (line  25)
 * tabs in rules:                         Rule Introduction.   (line  21)
-* 'TAGS' (standard target):              Goals.               (line 112)
+* TAGS (standard target):                Goals.               (line 112)
 * tangle:                                Catalogue of Rules.  (line 149)
 * tangle <1>:                            Implicit Variables.  (line 100)
-* 'tar' (standard target):               Goals.               (line 101)
+* tar (standard target):                 Goals.               (line 101)
 * target:                                Rules.               (line   6)
 * target pattern, implicit:              Pattern Intro.       (line   9)
 * target pattern, static (not implicit): Static Usage.        (line  17)
@@ -5529,7 +5744,8 @@ Index of Concepts
 * targets, phony:                        Phony Targets.       (line   6)
 * terminal rule:                         Match-Anything Rules.
                                                               (line   6)
-* 'test' (standard target):              Goals.               (line 116)
+* terminal, output to:                   Terminal Output.     (line   6)
+* test (standard target):                Goals.               (line 116)
 * testing compilation:                   Testing.             (line   6)
 * tex:                                   Catalogue of Rules.  (line 149)
 * tex <1>:                               Implicit Variables.  (line  87)
@@ -5537,9 +5753,10 @@ Index of Concepts
 * texi2dvi:                              Catalogue of Rules.  (line 156)
 * texi2dvi <1>:                          Implicit Variables.  (line  91)
 * Texinfo, rule to format:               Catalogue of Rules.  (line 156)
-* tilde ('~'):                           Wildcards.           (line  11)
-* 'touch' (shell command):               Wildcard Examples.   (line  21)
-* 'touch' (shell command) <1>:           Empty Targets.       (line  25)
+* tilde (~):                             Wildcards.           (line  11)
+* tools, sharing job slots:              Job Slots.           (line   6)
+* touch (shell command):                 Wildcard Examples.   (line  21)
+* touch (shell command) <1>:             Empty Targets.       (line  25)
 * touching files:                        Instead of Execution.
                                                               (line  24)
 * traditional directory search (GPATH):  Search Algorithm.    (line  42)
@@ -5559,7 +5776,7 @@ Index of Concepts
 * variable references in recipes:        Variables in Recipes.
                                                               (line   6)
 * variables:                             Variables Simplify.  (line   6)
-* variables, '$' in name:                Computed Names.      (line   6)
+* variables, $ in name:                  Computed Names.      (line   6)
 * variables, and implicit rule:          Automatic Variables. (line   6)
 * variables, appending to:               Appending.           (line   6)
 * variables, automatic:                  Automatic Variables. (line   6)
@@ -5595,8 +5812,8 @@ Index of Concepts
 * varying prerequisites:                 Static Pattern.      (line   6)
 * verbatim variable definition:          Multi-Line.          (line   6)
 * vpath:                                 Directory Search.    (line   6)
-* 'VPATH', and implicit rules:           Implicit/Search.     (line   6)
-* 'VPATH', and link libraries:           Libraries/Search.    (line   6)
+* VPATH, and implicit rules:             Implicit/Search.     (line   6)
+* VPATH, and link libraries:             Libraries/Search.    (line   6)
 * warnings, printing:                    Make Control Functions.
                                                               (line  35)
 * weave:                                 Catalogue of Rules.  (line 149)
@@ -5610,7 +5827,7 @@ Index of Concepts
 * wildcard pitfalls:                     Wildcard Pitfall.    (line   6)
 * wildcard, function:                    File Name Functions. (line 106)
 * wildcard, in archive member:           Archive Members.     (line  36)
-* wildcard, in 'include':                Include.             (line  13)
+* wildcard, in include:                  Include.             (line  13)
 * wildcards and MS-DOS/MS-Windows backslashes: Wildcard Pitfall.
                                                               (line  31)
 * Windows, choosing a shell in:          Choosing the Shell.  (line  38)
@@ -5629,7 +5846,7 @@ Index of Concepts
 * writing to a file:                     File Function.       (line   6)
 * yacc:                                  Catalogue of Rules.  (line 117)
 * yacc <1>:                              Implicit Variables.  (line  77)
-* 'yacc':                                Canned Recipes.      (line  18)
+* yacc <2>:                              Canned Recipes.      (line  18)
 * Yacc, rule to run:                     Catalogue of Rules.  (line 117)
 
 \1f
@@ -5708,6 +5925,7 @@ Index of Functions, Variables, & Directives
 * .SECONDEXPANSION <1>:                  Special Targets.     (line  63)
 * .SHELLFLAGS:                           Choosing the Shell.  (line   6)
 * .SHELLFLAGS <1>:                       Choosing the Shell.  (line  87)
+* .SHELLSTATUS:                          Shell Function.      (line  25)
 * .SILENT:                               Special Targets.     (line 121)
 * .SILENT <1>:                           Echoing.             (line  24)
 * .SUFFIXES:                             Special Targets.     (line  16)
@@ -5749,7 +5967,7 @@ Index of Functions, Variables, & Directives
 * CPP:                                   Implicit Variables.  (line  52)
 * CPPFLAGS:                              Implicit Variables.  (line 129)
 * CTANGLE:                               Implicit Variables.  (line 103)
-* 'CURDIR':                              Recursion.           (line  28)
+* CURDIR:                                Recursion.           (line  28)
 * CWEAVE:                                Implicit Variables.  (line  97)
 * CXX:                                   Implicit Variables.  (line  49)
 * CXXFLAGS:                              Implicit Variables.  (line 123)
@@ -5823,10 +6041,10 @@ Index of Functions, Variables, & Directives
 * MAKELEVEL:                             Variables/Recursion. (line 114)
 * MAKELEVEL <1>:                         Flavors.             (line  88)
 * MAKEOVERRIDES:                         Options/Recursion.   (line  50)
-* 'MAKESHELL' (MS-DOS alternative to 'SHELL'): Choosing the Shell.
+* MAKESHELL (MS-DOS alternative to SHELL): Choosing the Shell.
                                                               (line  27)
 * MAKE_HOST:                             Quick Reference.     (line 348)
-* MAKE_RESTARTS (number of times 'make' has restarted): Special Variables.
+* MAKE_RESTARTS (number of times make has restarted): Special Variables.
                                                               (line  73)
 * MAKE_TERMERR (whether stderr is a terminal): Special Variables.
                                                               (line  80)
@@ -5854,7 +6072,7 @@ Index of Functions, Variables, & Directives
 * SHELL:                                 Choosing the Shell.  (line   6)
 * SHELL <1>:                             Choosing the Shell.  (line  88)
 * shell:                                 Shell Function.      (line   6)
-* 'SHELL' (recipe execution):            Execution.           (line   6)
+* SHELL (recipe execution):              Execution.           (line   6)
 * sort:                                  Text Functions.      (line 147)
 * strip:                                 Text Functions.      (line  80)
 * subst:                                 Multiple Targets.    (line  28)
index b0f5af7..01bcec7 100644 (file)
@@ -3,7 +3,7 @@
 @setfilename make.info
 
 @include version.texi
-@set EDITION 0.73
+@set EDITION 0.74
 
 @settitle GNU @code{make}
 @setchapternewpage odd
@@ -26,7 +26,8 @@ of @cite{The GNU Make Manual}, for GNU @code{make} version @value{VERSION}.
 
 Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007,
-2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free Software
+Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -100,6 +101,7 @@ Cover art by Etienne Suvasa.
                                   based on their file names.
 * Archives::                    How @code{make} can update library archives.
 * Extending make::              Using extensions to @code{make}.
+* Integrating make::            Integrating @code{make} with other tools.
 * Features::                    Features GNU @code{make} has over other @code{make}s.
 * Missing::                     What GNU @code{make} lacks from other @code{make}s.
 * Makefile Conventions::        Conventions for writing makefiles for
@@ -356,6 +358,16 @@ Loading Dynamic Objects
 * Loaded Object API::           Programmatic interface for loaded objects.
 * Loaded Object Example::       Example of a loaded object
 
+Integrating GNU @code{make}
+
+* Job Slots::                   Share job slots with GNU @code{make}.
+* Terminal Output::             Control output to terminals.
+
+Sharing Job Slots with GNU @code{make}
+
+* POSIX Jobserver::             Using the jobserver on POSIX systems.
+* Windows Jobserver::           Using the jobserver on Windows systems.
+
 @end detailmenu
 @end menu
 
@@ -4709,9 +4721,9 @@ doesn't count against the total jobs (otherwise we could get @samp{N}
 sub-@code{make}s running and have no slots left over for any real work!)
 
 If your operating system doesn't support the above communication, then
-@samp{-j 1} is always put into @code{MAKEFLAGS} instead of the value you
-specified.  This is because if the @w{@samp{-j}} option were passed down
-to sub-@code{make}s, you would get many more jobs running in parallel
+no @samp{-j} is added to @code{MAKEFLAGS}, so that sub-@code{make}s
+run in non-parallel mode.  If the @w{@samp{-j}} option were passed down
+to sub-@code{make}s you would get many more jobs running in parallel
 than you asked for.  If you give @samp{-j} with no numeric argument,
 meaning to run as many jobs as possible in parallel, this is passed
 down, since multiple infinities are no more than one.@refill
@@ -4970,27 +4982,24 @@ beginning with a recipe prefix character to define an empty recipe,
 but this would be confusing because such a line looks empty.
 
 @findex .DEFAULT@r{, and empty recipes}
-You may be wondering why you would want to define a recipe that
-does nothing.  The only reason this is useful is to prevent a target
-from getting implicit recipes (from implicit rules or the
-@code{.DEFAULT} special target; @pxref{Implicit Rules} and
-@pxref{Last Resort, ,Defining Last-Resort Default Rules}).@refill
-
-@c !!! another reason is for canonical stamp files:
-@ignore
-@example
-foo: stamp-foo ;
-stamp-foo: foo.in
-        create foo frm foo.in
-        touch $@
-@end example
-@end ignore
-
-You may be inclined to define empty recipes for targets that are
-not actual files, but only exist so that their prerequisites can be
+You may be wondering why you would want to define a recipe that does
+nothing.  One reason this is useful is to prevent a target from
+getting implicit recipes (from implicit rules or the @code{.DEFAULT}
+special target; @pxref{Implicit Rules} and @pxref{Last Resort,
+,Defining Last-Resort Default Rules}).@refill
+
+Empty recipes can also be used to avoid errors for targets that will
+be created as a side-effect of another recipe: if the target does not
+exist the empty recipe ensures that @code{make} won't complain that it
+doesn't know how to build the target, and @code{make} will assume the
+target is out of date.
+
+You may be inclined to define empty recipes for targets that are not
+actual files, but only exist so that their prerequisites can be
 remade.  However, this is not the best way to do that, because the
-prerequisites may not be remade properly if the target file actually does exist.
-@xref{Phony Targets, ,Phony Targets}, for a better way to do this.
+prerequisites may not be remade properly if the target file actually
+does exist.  @xref{Phony Targets, ,Phony Targets}, for a better way to
+do this.
 
 @node Using Variables, Conditionals, Recipes, Top
 @chapter How to Use Variables
@@ -5616,7 +5625,7 @@ Several variables have constant initial values.
 @cindex !=
 
 To set a variable from the makefile, write a line starting with the
-variable name followed by @samp{=} @samp{:=}, or @samp{::=}.  Whatever
+variable name followed by @samp{=}, @samp{:=}, or @samp{::=}.  Whatever
 follows the @samp{=}, @samp{:=}, or @samp{::=} on the line becomes the
 value.  For example,
 
@@ -5669,7 +5678,7 @@ endif
 @end example
 
 The shell assignment operator @samp{!=} can be used to execute a
-program and set a variable to its output.  This operator first
+shell script and set a variable to its output.  This operator first
 evaluates the right-hand side, then passes that result to the shell
 for execution.  If the result of the execution ends in a newline, that
 one newline is removed; all other newlines are replaced by spaces.
@@ -5694,6 +5703,9 @@ hash := $(shell printf '\043')
 var := $(shell find . -name "*.c")
 @end example
 
+As with the @code{shell} function, the exit status of the just-invoked
+shell script is stored in the @code{.SHELLSTATUS} variable.
+
 
 @node Appending, Override Directive, Setting, Using Variables
 @section Appending More Text to Variables
@@ -6636,12 +6648,12 @@ effective; otherwise, the @var{text-if-false}, if any, is effective.
 
 @item ifdef @var{variable-name}
 The @code{ifdef} form takes the @emph{name} of a variable as its
-argument, not a reference to a variable.  The value of that variable
-has a non-empty value, the @var{text-if-true} is effective; otherwise,
-the @var{text-if-false}, if any, is effective.  Variables that have
-never been defined have an empty value.  The text @var{variable-name}
-is expanded, so it could be a variable or function that expands
-to the name of a variable.  For example:
+argument, not a reference to a variable.  If the value of that
+variable has a non-empty value, the @var{text-if-true} is effective;
+otherwise, the @var{text-if-false}, if any, is effective.  Variables
+that have never been defined have an empty value.  The text
+@var{variable-name} is expanded, so it could be a variable or function
+that expands to the name of a variable.  For example:
 
 @example
 bar = true
@@ -7520,13 +7532,22 @@ no?), but it is more likely to be a mistake.
 @findex file
 @cindex writing to a file
 @cindex file, writing to
-
-The @code{file} function allows the makefile to write to a file.  Two
-modes of writing are supported: overwrite, where the text is written
-to the beginning of the file and any existing content is lost, and
-append, where the text is written to the end of the file, preserving
-the existing content.  In all cases the file is created if it does not
-exist.
+@cindex reading from a file
+@cindex file, reading from
+
+The @code{file} function allows the makefile to write to or read from
+a file.  Two modes of writing are supported: overwrite, where the text
+is written to the beginning of the file and any existing content is
+lost, and append, where the text is written to the end of the file,
+preserving the existing content.  In both cases the file is created if
+it does not exist.  It is a fatal error if the file cannot be opened
+for writing, or if the write operation fails.  The @code{file}
+function expands to the empty string when writing to a file.
+
+When reading from a file, the @code{file} function expands to the
+verbatim contents of the file, except that the final newline (if there
+is one) will be stripped.  Attempting to read from a non-existent file
+expands to the empty string.
 
 The syntax of the @code{file} function is:
 
@@ -7534,21 +7555,23 @@ The syntax of the @code{file} function is:
 $(file @var{op} @var{filename}[,@var{text}])
 @end example
 
-The operator @var{op} can be either @code{>} which indicates overwrite
-mode, or @code{>>} which indicates append mode.  The @var{filename}
-indicates the file to be written to.  There may optionally be
+When the @code{file} function is evaluated all its arguments are
+expanded first, then the file indicated by @var{filename} will be
+opened in the mode described by @var{op}.
+
+The operator @var{op} can be @code{>} to indicate the file will be
+overwritten with new content, @code{>>} to indicate the current
+contents of the file will be appended to, or @code{<} to indicate the
+contents of the file will be read in.  The @var{filename} specifies
+the file to be written to or read from.  There may optionally be
 whitespace between the operator and the file name.
 
-When the @code{file} function is expanded all its arguments are
-expanded first, then the file indicated by @var{filename} will be
-opened in the mode described by @var{op}.  Finally @var{text} will be
-written to the file.  If @var{text} does not already end in a newline,
-even if empty, a final newline will be written.  If the @var{text}
-argument is not given, nothing will be written.  The result of
-evaluating the @code{file} function is always the empty string.
+When reading files, it is an error to provide a @var{text} value.
 
-It is a fatal error if the file cannot be opened for writing, or if
-the write operation fails.
+When writing files, @var{text} will be written to the file.  If
+@var{text} does not already end in a newline a final newline will be
+written (even if @var{text} is the empty string).  If the @var{text}
+argument is not given at all, nothing will be written.
 
 For example, the @code{file} function can be useful if your build
 system has a limited command line size and your recipe runs a command
@@ -8024,6 +8047,10 @@ implications of using the @code{shell} function within recursively
 expanded variables vs.@: simply expanded variables (@pxref{Flavors, ,The
 Two Flavors of Variables}).
 
+@vindex .SHELLSTATUS
+After the @code{shell} function or @samp{!=} assignment operator is
+used, its exit status is placed in the @code{.SHELLSTATUS} variable.
+
 Here are some examples of the use of the @code{shell} function:
 
 @example
@@ -10690,7 +10717,7 @@ in the normal way (@pxref{Suffix Rules}).  Thus a double-suffix rule
 @w{@samp{.@var{x}.a}} produces two pattern rules: @samp{@w{(%.o):}
 @w{%.@var{x}}} and @samp{@w{%.a}: @w{%.@var{x}}}.@refill
 
-@node Extending make, Features, Archives, Top
+@node Extending make, Integrating make, Archives, Top
 @chapter Extending GNU @code{make}
 @cindex make extensions
 
@@ -11331,7 +11358,225 @@ cc -shared -fPIC -o mk_temp.so mk_temp.c
 Temporary filename: tmpfile.A7JEwd
 @end example
 
-@node Features, Missing, Extending make, Top
+@node Integrating make, Features, Extending make, Top
+@chapter Integrating GNU @code{make}
+@cindex make integration
+
+GNU @code{make} is often one component in a larger system of tools,
+including integrated development environments, compiler toolchains,
+and others.  The role of @code{make} is to start commands and
+determine whether they succeeded or not: no special integration is
+needed to accomplish that.  However, sometimes it is convenient to
+bind @code{make} more tightly with other parts of the system, both
+higher-level (tools that invoke @code{make}) and lower-level (tools
+that @code{make} invokes).
+
+@menu
+* Job Slots::                   Share job slots with GNU @code{make}.
+* Terminal Output::             Control output to terminals.
+@end menu
+
+@node Job Slots, Terminal Output, Integrating make, Integrating make
+@section Sharing Job Slots with GNU @code{make}
+@cindex job slots, sharing
+@cindex tools, sharing job slots
+
+GNU @code{make} has the ability to run multiple recipes in parallel
+(@pxref{Parallel, ,Parallel Execution}) and to cap the total number of
+parallel jobs even across recursive invocations of @code{make}
+(@pxref{Options/Recursion, ,Communicating Options to a
+Sub-@code{make}}).  Tools that @code{make} invokes which are also able
+to run multiple operations in parallel, either using multiple threads
+or multiple processes, can be enhanced to participate in GNU
+@code{make}'s job management facility to ensure that the total number
+of active threads/processes running on the system does not exceed the
+maximum number of slots provided to GNU @code{make}. @refill
+
+@cindex jobserver
+GNU @code{make} uses a method called the ``jobserver'' to control the
+number of active jobs across recursive invocations.  The actual
+implementation of the jobserver varies across different operating
+systems, but some fundamental aspects are always true.
+
+First, only command lines that @code{make} understands to be recursive
+invocations of @code{make} (@pxref{MAKE Variable, ,How the @code{MAKE}
+Variable Works}) will have access to the jobserver.  When writing
+makefiles you must be sure to mark the command as recursive (most
+commonly by prefixing the command line with the @code{+} indicator
+(@pxref{Recursion, ,Recursive Use of @code{make}}).
+
+Second, @code{make} will provide information necessary for accessing
+the jobserver through the environment to its children, in the
+@code{MAKEFLAGS} environment variable.  Tools which want to
+participate in the jobserver protocol will need to parse this
+environment variable, as described in subsequent sections.
+
+Third, every command @code{make} starts has one implicit job slot
+reserved for it before it starts.  Any tool which wants to participate
+in the jobserver protocol should assume it can always run one job
+without having to contact the jobserver at all.
+
+Finally, it's critical that tools that participate in the jobserver
+protocol return the exact number of slots they obtained from the
+jobserver back to the jobserver before they exit, even under error
+conditions.  Remember that the implicit job slot should @strong{not}
+be returned to the jobserver!  Returning too few slots means that
+those slots will be lost for the rest of the build process; returning
+too many slots means that extra slots will be available.  The
+top-level @code{make} command will print an error message at the end
+of the build if it detects an incorrect number of slots available in
+the jobserver.
+
+As an example, suppose you are implementing a linker which provides
+for multithreaded operation.  You would like to enhance the linker so
+that if it is invoked by GNU @code{make} it can participate in the
+jobserver protocol to control how many threads are used during link.
+First you will need to modify the linker to determine if the
+@code{MAKEFLAGS} environment variable is set.  Next you will need to
+parse the value of that variable to determine if the jobserver is
+available, and how to access it.  If it is available then you can
+access it to obtain job slots controlling how much parallelism your
+tool can use.  Once done your tool must return those job slots back to
+the jobserver.
+
+@menu
+* POSIX Jobserver::             Using the jobserver on POSIX systems.
+* Windows Jobserver::           Using the jobserver on Windows systems.
+@end menu
+
+@node POSIX Jobserver, Windows Jobserver, Job Slots, Job Slots
+@subsection POSIX Jobserver Interaction
+@cindex jobserver on POSIX
+
+On POSIX systems the jobserver is implemented as a simple UNIX pipe.
+The pipe will be pre-loaded with one single-character token for each
+available job.  To obtain an extra slot you must read a single
+character from the jobserver pipe; to release a slot you must write a
+single character back into the jobserver pipe.
+
+To access the pipe you must parse the @code{MAKEFLAGS} variable and
+look for the argument string @code{--jobserver-auth=R,W} where
+@samp{R} and @samp{W} are non-negative integers representing file
+descriptors: @samp{R} is the read file descriptor and @samp{W} is the
+write file descriptor.
+
+It's important that when you release the job slot, you write back the
+same character you read from the pipe for that slot.  Don't assume
+that all tokens are the same character; different characters may have
+different meanings to GNU @code{make}.  The order is not important,
+since @code{make} has no idea in what order jobs will complete anyway.
+
+There are various error conditions you must consider to ensure your
+implementation is robust:
+
+@itemize @bullet
+@item
+Usually you will have a command-line argument controlling the parallel
+operation of your tool.  Consider whether your tool should detect
+situations where both the jobserver and the command-line argument are
+specified, and how it should react.
+
+@item
+If your tool determines that the @code{--jobserver-auth} option is
+available in @code{MAKEFLAGS} but that the file descriptors specified
+are closed, this means that the calling @code{make} process did not
+think that your tool was a recursive @code{make} invocation (e.g., the
+command line was not prefixed with a @code{+} character).  You should
+notify your users of this situation.
+
+@item
+Your tool should also examine the first word of the @code{MAKEFLAGS}
+variable and look for the character @code{n}.  If this character is
+present then @code{make} was invoked with the @samp{-n} option and
+your tool should stop without performing any operations.
+
+@item
+Your tool should be sure to write back the tokens it read, even under
+error conditions.  This includes not only errors in your tool but also
+outside influences such as interrupts (@code{SIGINT}), etc.  You may
+want to install signal handlers to manage this write-back.
+@end itemize
+
+@node Windows Jobserver,  , POSIX Jobserver, Job Slots
+@subsection Windows Jobserver Interaction
+@cindex jobserver on Windows
+
+On Windows systems the jobserver is implemented as a named semaphore.
+The semaphore will be set with an initial count equal to the number of
+available slots; to obtain a slot you must wait on the semaphore (with
+or without a timeout).  To release a slot, release the semaphore.
+
+To access the semaphore you must parse the @code{MAKEFLAGS} variable and
+look for the argument string @code{--jobserver-auth=NAME} where
+@samp{NAME} is the name of the named semaphore.  Use this name with
+@code{OpenSemaphore} to create a handle to the semaphore.
+
+There are various error conditions you must consider to ensure your
+implementation is robust:
+
+@itemize @bullet
+@item
+Usually you will have a command-line argument controlling the parallel
+operation of your tool.  Consider whether your tool should detect
+situations where both the jobserver and the command-line argument are
+specified, and how it should react.
+
+@item
+Your tool should be sure to release the semaphore for the tokens it
+read, even under error conditions.  This includes not only errors in
+your tool but also outside influences such as interrupts
+(@code{SIGINT}), etc.  You may want to install signal handlers to
+manage this write-back.
+@end itemize
+
+@node Terminal Output,  , Job Slots, Integrating make
+@section Synchronized Terminal Output
+@cindex parallel output to terminal
+@cindex terminal, output to
+
+Normally GNU @code{make} will invoke all commands with access to the
+same standard and error outputs that @code{make} itself was started
+with.  A number of tools will detect whether the output is a terminal
+or not-a-terminal, and use this information to change the output
+style.  For example if the output goes to a terminal the tool may add
+control characters that set color, or even change the location of the
+cursor.  If the output is not going to a terminal then these special
+control characters are not emitted so that they don't corrupt log
+files, etc.
+
+The @code{--output-sync} (@pxref{Parallel Output, ,Output During
+Parallel Output}) option will defeat the terminal detection.  When
+output synchronization is enabled GNU @code{make} arranges for all
+command output to be written to a file, so that its output can be
+written as a block without interference from other commands.  This
+means that all tools invoked by @code{make} will believe that their
+output is not going to be displayed on a terminal, even when it will
+be (because @code{make} will display it there after the command is
+completed).
+
+In order to facilitate tools which would like to determine whether or
+not their output will be displayed on a terminal, GNU @code{make} will
+set the @code{MAKE_TERMOUT} and @code{MAKE_TERMERR} environment
+variables before invoking any commands.  Tools which would like to
+determine whether standard or error output (respectively) will be
+displayed on a terminal can check these environment variables to
+determine if they exist and contain a non-empty value.  If so the tool
+can assume that the output will (eventually) be displayed on a
+terminal.  If the variables are not set or have an empty value, then
+the tool should fall back to its normal methods of detecting whether
+output is going to a terminal or not.
+
+The content of the variables can be parsed to determine the type of
+terminal which will be used to display the output.
+
+Similarly, environments which invoke @code{make} and would like to
+capture the output and eventually display it on a terminal (or some
+display which can interpret terminal control characters) can set these
+variables before invoking @code{make}.  GNU @code{make} will not
+modify these environment variables if they already exist when it
+starts.
+
+@node Features, Missing, Integrating make, Top
 @chapter Features of GNU @code{make}
 @cindex features of GNU @code{make}
 @cindex portability
@@ -12087,9 +12332,9 @@ variable has no effect on the operation of @code{make}.@*
 
 @item CURDIR
 
-Set to the pathname of the current working directory (after all
-@code{-C} options are processed, if any).  Setting this variable has no
-effect on the operation of @code{make}.@*
+Set to the absolute pathname of the current working directory (after
+all @code{-C} options are processed, if any).  Setting this variable
+has no effect on the operation of @code{make}.@*
 @xref{Recursion, ,Recursive Use of @code{make}}.
 
 @item SUFFIXES
index c46333e..477e1a2 100644 (file)
@@ -1,4 +1,4 @@
-@set UPDATED 5 October 2014
-@set UPDATED-MONTH October 2014
-@set EDITION 4.1
-@set VERSION 4.1
+@set UPDATED 21 May 2016
+@set UPDATED-MONTH May 2016
+@set EDITION 4.2
+@set VERSION 4.2
index c46333e..477e1a2 100644 (file)
@@ -1,4 +1,4 @@
-@set UPDATED 5 October 2014
-@set UPDATED-MONTH October 2014
-@set EDITION 4.1
-@set VERSION 4.1
+@set UPDATED 21 May 2016
+@set UPDATED-MONTH May 2016
+@set EDITION 4.2
+@set VERSION 4.2
index fac2e88..71e71e1 100644 (file)
@@ -1,5 +1,5 @@
 @echo off\r
-rem Copyright (C) 1998-2014 Free Software Foundation, Inc.\r
+rem Copyright (C) 1998-2016 Free Software Foundation, Inc.\r
 rem This file is part of GNU Make.\r
 rem\r
 rem GNU Make is free software; you can redistribute it and/or modify it under\r
index 1c87db1..0b5fd01 100644 (file)
--- a/expand.c
+++ b/expand.c
@@ -1,5 +1,5 @@
 /* Variable expansion functions for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -26,7 +26,7 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Initially, any errors reported when expanding strings will be reported
    against the file where the error appears.  */
-const gmk_floc **expanding_var = &reading_file;
+const floc **expanding_var = &reading_file;
 
 /* The next two describe the variable output buffer.
    This buffer is used to hold the variable-expansion of a line of the
@@ -96,8 +96,8 @@ char *
 recursively_expand_for_file (struct variable *v, struct file *file)
 {
   char *value;
-  const gmk_floc *this_var;
-  const gmk_floc **saved_varp;
+  const floc *this_var;
+  const floc **saved_varp;
   struct variable_set_list *save = 0;
   int set_reading = 0;
 
@@ -235,8 +235,10 @@ variable_expand_string (char *line, const char *string, long length)
       switch (*p)
         {
         case '$':
-          /* $$ seen means output one $ to the variable output buffer.  */
-          o = variable_buffer_output (o, p, 1);
+        case '\0':
+          /* $$ or $ at the end of the string means output one $ to the
+             variable output buffer.  */
+          o = variable_buffer_output (o, p1, 1);
           break;
 
         case '(':
@@ -381,11 +383,8 @@ variable_expand_string (char *line, const char *string, long length)
           }
           break;
 
-        case '\0':
-          break;
-
         default:
-          if (isblank ((unsigned char)p[-1]))
+          if (ISSPACE (p[-1]))
             break;
 
           /* A $ followed by a random char is a variable reference:
@@ -459,7 +458,7 @@ variable_expand_for_file (const char *line, struct file *file)
 {
   char *result;
   struct variable_set_list *savev;
-  const gmk_floc *savef;
+  const floc *savef;
 
   if (file == 0)
     return variable_expand (line);
diff --git a/file.c b/file.c
index e1a8e80..ae1c285 100644 (file)
--- a/file.c
+++ b/file.c
@@ -1,5 +1,5 @@
 /* Target file management for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -57,9 +57,6 @@ file_hash_cmp (const void *x, const void *y)
                           ((struct file const *) y)->hname);
 }
 
-#ifndef FILE_BUCKETS
-#define FILE_BUCKETS    1007
-#endif
 static struct hash_table files;
 
 /* Whether or not .SECONDARY with no prerequisites was given.  */
@@ -75,9 +72,12 @@ lookup_file (const char *name)
 {
   struct file *f;
   struct file file_key;
-#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS)
+#ifdef VMS
+  int want_vmsify;
+#ifndef WANT_CASE_SENSITIVE_TARGETS
   char *lname;
 #endif
+#endif
 
   assert (*name != '\0');
 
@@ -85,6 +85,7 @@ lookup_file (const char *name)
      for names read from makefiles.  It is here for names passed
      on the command line.  */
 #ifdef VMS
+   want_vmsify = (strpbrk (name, "]>:^") != NULL);
 # ifndef WANT_CASE_SENSITIVE_TARGETS
   if (*name != '.')
     {
@@ -100,6 +101,8 @@ lookup_file (const char *name)
 
   while (name[0] == '[' && name[1] == ']' && name[2] != '\0')
       name += 2;
+  while (name[0] == '<' && name[1] == '>' && name[2] != '\0')
+      name += 2;
 #endif
   while (name[0] == '.'
 #ifdef HAVE_DOS_PATHS
@@ -120,15 +123,19 @@ lookup_file (const char *name)
     }
 
   if (*name == '\0')
-    /* It was all slashes after a dot.  */
-#if defined(VMS)
-    name = "[]";
-#elif defined(_AMIGA)
-    name = "";
+    {
+      /* It was all slashes after a dot.  */
+#if defined(_AMIGA)
+      name = "";
 #else
-    name = "./";
+      name = "./";
 #endif
-
+#if defined(VMS)
+      /* TODO - This section is probably not needed. */
+      if (want_vmsify)
+        name = "[]";
+#endif
+    }
   file_key.hname = name;
   f = hash_find_item (&files, &file_key);
 #if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS)
index b8973db..507a027 100644 (file)
--- a/filedef.h
+++ b/filedef.h
@@ -1,5 +1,5 @@
 /* Definition of target file data structures for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -103,7 +103,7 @@ struct file
   };
 
 
-extern struct file *suffix_file, *default_file;
+extern struct file *default_file;
 
 
 struct file *lookup_file (const char *name);
@@ -117,9 +117,12 @@ void rehash_file (struct file *file, const char *name);
 void set_command_state (struct file *file, enum cmd_state state);
 void notice_finished_file (struct file *file);
 void init_hash_files (void);
+void verify_file_data_base (void);
 char *build_target_list (char *old_list);
 void print_prereqs (const struct dep *deps);
 void print_file_data_base (void);
+int try_implicit_rule (struct file *file, unsigned int depth);
+int stemlen_compare (const void *v1, const void *v2);
 
 #if FILE_TIMESTAMP_HI_RES
 # define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \
index 169c3a1..b7f0e56 100644 (file)
@@ -1,5 +1,5 @@
 /* Builtin function expansion for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -115,8 +115,8 @@ subst_expand (char *o, const char *text, const char *subst, const char *replace,
       /* If we're substituting only by fully matched words,
          or only at the ends of words, check that this case qualifies.  */
       if (by_word
-          && ((p > text && !isblank ((unsigned char)p[-1]))
-              || ! STOP_SET (p[slen], MAP_BLANK|MAP_NUL)))
+          && ((p > text && !ISSPACE (p[-1]))
+              || ! STOP_SET (p[slen], MAP_SPACE|MAP_NUL)))
         /* Struck out.  Output the rest of the string that is
            no longer to be replaced.  */
         o = variable_buffer_output (o, subst, slen);
@@ -566,10 +566,12 @@ func_notdir_suffix (char *o, char **argv, const char *funcname)
       if (is_notdir || p >= p2)
         {
 #ifdef VMS
-          o = variable_buffer_output (o, ",", 1);
-#else
-          o = variable_buffer_output (o, " ", 1);
+          if (vms_comma_separator)
+            o = variable_buffer_output (o, ",", 1);
+          else
 #endif
+          o = variable_buffer_output (o, " ", 1);
+
           doneany = 1;
         }
     }
@@ -596,7 +598,7 @@ func_basename_dir (char *o, char **argv, const char *funcname)
   int stop = MAP_DIRSEP | (is_basename ? MAP_DOT : 0) | MAP_NUL;
 #ifdef VMS
   /* As in func_notdir_suffix ... */
-  char *vms_p3 = alloca(strlen(p3) + 1);
+  char *vms_p3 = alloca (strlen(p3) + 1);
   int i;
   for (i = 0; p3[i]; i++)
     if (p3[i] == ',')
@@ -624,7 +626,13 @@ func_basename_dir (char *o, char **argv, const char *funcname)
 #endif
       else if (is_dir)
 #ifdef VMS
-        o = variable_buffer_output (o, "[]", 2);
+        {
+          extern int vms_report_unix_paths;
+          if (vms_report_unix_paths)
+            o = variable_buffer_output (o, "./", 2);
+          else
+            o = variable_buffer_output (o, "[]", 2);
+        }
 #else
 #ifndef _AMIGA
       o = variable_buffer_output (o, "./", 2);
@@ -637,10 +645,12 @@ func_basename_dir (char *o, char **argv, const char *funcname)
         o = variable_buffer_output (o, p2, len);
 
 #ifdef VMS
-      o = variable_buffer_output (o, ",", 1);
-#else
-      o = variable_buffer_output (o, " ", 1);
+      if (vms_comma_separator)
+        o = variable_buffer_output (o, ",", 1);
+      else
 #endif
+        o = variable_buffer_output (o, " ", 1);
+
       doneany = 1;
     }
 
@@ -745,9 +755,9 @@ func_words (char *o, char **argv, const char *funcname UNUSED)
 char *
 strip_whitespace (const char **begpp, const char **endpp)
 {
-  while (*begpp <= *endpp && isspace ((unsigned char)**begpp))
+  while (*begpp <= *endpp && ISSPACE (**begpp))
     (*begpp) ++;
-  while (*endpp >= *begpp && isspace ((unsigned char)**endpp))
+  while (*endpp >= *begpp && ISSPACE (**endpp))
     (*endpp) --;
   return (char *)*begpp;
 }
@@ -860,8 +870,12 @@ func_foreach (char *o, char **argv, const char *funcname UNUSED)
   unsigned int len;
   struct variable *var;
 
+  /* Clean up the variable name by removing whitespace.  */
+  char *vp = next_token (varname);
+  end_of_token (vp)[0] = '\0';
+
   push_new_variable_scope ();
-  var = define_variable (varname, strlen (varname), "", o_automatic, 0);
+  var = define_variable (vp, strlen (vp), "", o_automatic, 0);
 
   /* loop through LIST,  put the value in VAR and expand BODY */
   while ((p = find_next_token (&list_iterator, &len)) != 0)
@@ -1071,10 +1085,9 @@ func_strip (char *o, char **argv, const char *funcname UNUSED)
       int i=0;
       const char *word_start;
 
-      while (isspace ((unsigned char)*p))
-        ++p;
+      NEXT_TOKEN (p);
       word_start = p;
-      for (i=0; *p != '\0' && !isspace ((unsigned char)*p); ++p, ++i)
+      for (i=0; *p != '\0' && !ISSPACE (*p); ++p, ++i)
         {}
       if (!i)
         break;
@@ -1440,10 +1453,23 @@ fold_newlines (char *buffer, unsigned int *length, int trim_newlines)
   *length = last_nonnl - buffer;
 }
 
+pid_t shell_function_pid = 0;
+static int shell_function_completed;
 
+void
+shell_completed (int exit_code, int exit_sig)
+{
+  char buf[256];
 
-int shell_function_pid = 0, shell_function_completed;
+  shell_function_pid = 0;
+  if (exit_sig == 0 && exit_code == 127)
+    shell_function_completed = -1;
+  else
+    shell_function_completed = 1;
 
+  sprintf (buf, "%d", exit_code);
+  define_variable_cname (".SHELLSTATUS", buf, o_override, 0);
+}
 
 #ifdef WINDOWS32
 /*untested*/
@@ -1592,8 +1618,7 @@ msdos_openpipe (int* pipedes, int *pidp, char *text)
   extern int dos_command_running, dos_status;
 
   /* Make sure not to bother processing an empty line.  */
-  while (isblank ((unsigned char)*text))
-    ++text;
+  NEXT_TOKEN (text);
   if (*text == '\0')
     return 0;
 
@@ -1623,14 +1648,15 @@ msdos_openpipe (int* pipedes, int *pidp, char *text)
         errno = EINTR;
       else if (errno == 0)
         errno = ENOMEM;
-      shell_function_completed = -1;
+      if (fpipe)
+        pclose (fpipe);
+      shell_completed (127, 0);
     }
   else
     {
       pipedes[0] = fileno (fpipe);
       *pidp = 42; /* Yes, the Meaning of Life, the Universe, and Everything! */
       errno = e;
-      shell_function_completed = 1;
     }
   return fpipe;
 }
@@ -1689,7 +1715,7 @@ func_shell_base (char *o, char **argv, int trim_newlines)
 #endif
       return o;
     }
-#endif
+#endif /* !__MSDOS__ */
 
   /* Using a target environment for 'shell' loses in cases like:
        export var = $(shell echo foobie)
@@ -1709,7 +1735,8 @@ func_shell_base (char *o, char **argv, int trim_newlines)
   if (reading_file && reading_file->filenm)
     {
       char *p = alloca (strlen (reading_file->filenm)+11+4);
-      sprintf (p, "%s:%lu: ", reading_file->filenm, reading_file->lineno);
+      sprintf (p, "%s:%lu: ", reading_file->filenm,
+               reading_file->lineno + reading_file->offset);
       error_prefix = p;
     }
   else
@@ -1728,6 +1755,7 @@ func_shell_base (char *o, char **argv, int trim_newlines)
       perror_with_name (error_prefix, "pipe");
       return o;
     }
+
 #elif defined(WINDOWS32)
   windows32_openpipe (pipedes, errfd, &pid, command_argv, envp);
   /* Restore the value of just_print_flag.  */
@@ -1736,11 +1764,11 @@ func_shell_base (char *o, char **argv, int trim_newlines)
   if (pipedes[0] < 0)
     {
       /* Open of the pipe failed, mark as failed execution.  */
-      shell_function_completed = -1;
+      shell_completed (127, 0);
       perror_with_name (error_prefix, "pipe");
       return o;
     }
-  else
+
 #else
   if (pipe (pipedes) < 0)
     {
@@ -1748,115 +1776,113 @@ func_shell_base (char *o, char **argv, int trim_newlines)
       return o;
     }
 
-# ifdef __EMX__
-  /* close some handles that are unnecessary for the child process */
+  /* Close handles that are unnecessary for the child process.  */
   CLOSE_ON_EXEC(pipedes[1]);
   CLOSE_ON_EXEC(pipedes[0]);
-  /* Never use fork()/exec() here! Use spawn() instead in exec_command() */
-  pid = child_execute_job (FD_STDIN, pipedes[1], errfd, command_argv, envp);
-  if (pid < 0)
-    perror_with_name (error_prefix, "spawn");
-# else /* ! __EMX__ */
-  pid = fork ();
+
+  {
+    struct output out;
+    out.syncout = 1;
+    out.out = pipedes[1];
+    out.err = errfd;
+
+    pid = child_execute_job (&out, 1, command_argv, envp);
+  }
+
   if (pid < 0)
-    perror_with_name (error_prefix, "fork");
-  else if (pid == 0)
     {
-#  ifdef SET_STACK_SIZE
-      /* Reset limits, if necessary.  */
-      if (stack_limit.rlim_cur)
-       setrlimit (RLIMIT_STACK, &stack_limit);
-#  endif
-      child_execute_job (FD_STDIN, pipedes[1], errfd, command_argv, envp);
+      perror_with_name (error_prefix, "fork");
+      return o;
     }
-  else
-# endif
 #endif
-    {
-      /* We are the parent.  */
-      char *buffer;
-      unsigned int maxlen, i;
-      int cc;
 
-      /* Record the PID for reap_children.  */
-      shell_function_pid = pid;
+  {
+    char *buffer;
+    unsigned int maxlen, i;
+    int cc;
+
+    /* Record the PID for reap_children.  */
+    shell_function_pid = pid;
 #ifndef  __MSDOS__
-      shell_function_completed = 0;
+    shell_function_completed = 0;
 
-      /* Free the storage only the child needed.  */
-      free (command_argv[0]);
-      free (command_argv);
+    /* Free the storage only the child needed.  */
+    free (command_argv[0]);
+    free (command_argv);
 
-      /* Close the write side of the pipe.  We test for -1, since
-         pipedes[1] is -1 on MS-Windows, and some versions of MS
-         libraries barf when 'close' is called with -1.  */
-      if (pipedes[1] >= 0)
-        close (pipedes[1]);
+    /* Close the write side of the pipe.  We test for -1, since
+       pipedes[1] is -1 on MS-Windows, and some versions of MS
+       libraries barf when 'close' is called with -1.  */
+    if (pipedes[1] >= 0)
+      close (pipedes[1]);
 #endif
 
-      /* Set up and read from the pipe.  */
+    /* Set up and read from the pipe.  */
 
-      maxlen = 200;
-      buffer = xmalloc (maxlen + 1);
+    maxlen = 200;
+    buffer = xmalloc (maxlen + 1);
 
-      /* Read from the pipe until it gets EOF.  */
-      for (i = 0; ; i += cc)
-        {
-          if (i == maxlen)
-            {
-              maxlen += 512;
-              buffer = xrealloc (buffer, maxlen + 1);
-            }
+    /* Read from the pipe until it gets EOF.  */
+    for (i = 0; ; i += cc)
+      {
+        if (i == maxlen)
+          {
+            maxlen += 512;
+            buffer = xrealloc (buffer, maxlen + 1);
+          }
 
-          EINTRLOOP (cc, read (pipedes[0], &buffer[i], maxlen - i));
-          if (cc <= 0)
-            break;
-        }
-      buffer[i] = '\0';
+        EINTRLOOP (cc, read (pipedes[0], &buffer[i], maxlen - i));
+        if (cc <= 0)
+          break;
+      }
+    buffer[i] = '\0';
 
-      /* Close the read side of the pipe.  */
+    /* Close the read side of the pipe.  */
 #ifdef  __MSDOS__
-      if (fpipe)
-        (void) pclose (fpipe);
+    if (fpipe)
+      {
+        int st = pclose (fpipe);
+        shell_completed (st, 0);
+      }
 #else
-      (void) close (pipedes[0]);
+    (void) close (pipedes[0]);
 #endif
 
-      /* Loop until child_handler or reap_children()  sets
-         shell_function_completed to the status of our child shell.  */
-      while (shell_function_completed == 0)
-        reap_children (1, 0);
+    /* Loop until child_handler or reap_children()  sets
+       shell_function_completed to the status of our child shell.  */
+    while (shell_function_completed == 0)
+      reap_children (1, 0);
 
-      if (batch_filename)
-        {
-          DB (DB_VERBOSE, (_("Cleaning up temporary batch file %s\n"),
-                           batch_filename));
-          remove (batch_filename);
-          free (batch_filename);
-        }
-      shell_function_pid = 0;
+    if (batch_filename)
+      {
+        DB (DB_VERBOSE, (_("Cleaning up temporary batch file %s\n"),
+                         batch_filename));
+        remove (batch_filename);
+        free (batch_filename);
+      }
+    shell_function_pid = 0;
 
-      /* The child_handler function will set shell_function_completed
-         to 1 when the child dies normally, or to -1 if it
-         dies with status 127, which is most likely an exec fail.  */
+    /* shell_completed() will set shell_function_completed to 1 when the
+       child dies normally, or to -1 if it dies with status 127, which is
+       most likely an exec fail.  */
 
-      if (shell_function_completed == -1)
-        {
-          /* This likely means that the execvp failed, so we should just
-             write the error message in the pipe from the child.  */
-          fputs (buffer, stderr);
-          fflush (stderr);
-        }
-      else
-        {
-          /* The child finished normally.  Replace all newlines in its output
-             with spaces, and put that in the variable output buffer.  */
-          fold_newlines (buffer, &i, trim_newlines);
-          o = variable_buffer_output (o, buffer, i);
-        }
+    if (shell_function_completed == -1)
+      {
+        /* This likely means that the execvp failed, so we should just
+           write the error message in the pipe from the child.  */
+        fputs (buffer, stderr);
+        fflush (stderr);
+      }
+    else
+      {
+        /* The child finished normally.  Replace all newlines in its output
+           with spaces, and put that in the variable output buffer.  */
+        fold_newlines (buffer, &i, trim_newlines);
+        o = variable_buffer_output (o, buffer, i);
+      }
 
-      free (buffer);
-    }
+    free (buffer);
+  }
 
   return o;
 }
@@ -1950,7 +1976,7 @@ func_shell_base (char *o, char **argv, int trim_newlines)
 }
 #endif  /* _AMIGA */
 
-char *
+static char *
 func_shell (char *o, char **argv, const char *funcname UNUSED)
 {
   return func_shell_base (o, argv, 1);
@@ -1979,8 +2005,7 @@ func_not (char *o, char **argv, char *funcname UNUSED)
 {
   const char *s = argv[0];
   int result = 0;
-  while (isspace ((unsigned char)*s))
-    s++;
+  NEXT_TOKEN (s);
   result = ! (*s);
   o = variable_buffer_output (o,  result ? "1" : "", result);
   return o;
@@ -2184,29 +2209,70 @@ func_file (char *o, char **argv, const char *funcname UNUSED)
           mode = "a";
           ++fn;
         }
-      fn = next_token (fn);
+      NEXT_TOKEN (fn);
 
-      fp = fopen (fn, mode);
+      if (fn[0] == '\0')
+        O (fatal, *expanding_var, _("file: missing filename"));
+
+      ENULLLOOP (fp, fopen (fn, mode));
       if (fp == NULL)
-        {
-          const char *err = strerror (errno);
-          OSS (fatal, reading_file, _("open: %s: %s"), fn, err);
-        }
+        OSS (fatal, reading_file, _("open: %s: %s"), fn, strerror (errno));
+
       if (argv[1])
         {
           int l = strlen (argv[1]);
           int nl = l == 0 || argv[1][l-1] != '\n';
 
           if (fputs (argv[1], fp) == EOF || (nl && fputc ('\n', fp) == EOF))
-            {
-              const char *err = strerror (errno);
-              OSS (fatal, reading_file, _("write: %s: %s"), fn, err);
-            }
+            OSS (fatal, reading_file, _("write: %s: %s"), fn, strerror (errno));
         }
-      fclose (fp);
+      if (fclose (fp))
+        OSS (fatal, reading_file, _("close: %s: %s"), fn, strerror (errno));
+    }
+  else if (fn[0] == '<')
+    {
+      char *preo = o;
+      FILE *fp;
+
+      ++fn;
+      NEXT_TOKEN (fn);
+      if (fn[0] == '\0')
+        O (fatal, *expanding_var, _("file: missing filename"));
+
+      if (argv[1])
+        O (fatal, *expanding_var, _("file: too many arguments"));
+
+      ENULLLOOP (fp, fopen (fn, "r"));
+      if (fp == NULL)
+        {
+          if (errno == ENOENT)
+            return o;
+          OSS (fatal, reading_file, _("open: %s: %s"), fn, strerror (errno));
+        }
+
+      while (1)
+        {
+          char buf[1024];
+          size_t l = fread (buf, 1, sizeof (buf), fp);
+          if (l > 0)
+            o = variable_buffer_output (o, buf, l);
+
+          if (ferror (fp))
+            if (errno != EINTR)
+              OSS (fatal, reading_file, _("read: %s: %s"), fn, strerror (errno));
+          if (feof (fp))
+            break;
+        }
+      if (fclose (fp))
+        OSS (fatal, reading_file, _("close: %s: %s"), fn, strerror (errno));
+
+      /* Remove trailing newline.  */
+      if (o > preo && o[-1] == '\n')
+        if (--o > preo && o[-1] == '\r')
+          --o;
     }
   else
-    OS (fatal, reading_file, _("Invalid file operation: %s"), fn);
+    OS (fatal, *expanding_var, _("file: invalid file operation: %s"), fn);
 
   return o;
 }
@@ -2379,7 +2445,8 @@ handle_function (char **op, const char **stringp)
   /* We found a builtin function.  Find the beginning of its arguments (skip
      whitespace after the name).  */
 
-  beg = next_token (beg + entry_p->len);
+  beg += entry_p->len;
+  NEXT_TOKEN (beg);
 
   /* Find the end of the function invocation, counting nested use of
      whichever kind of parens we use.  Since we're looking, count commas
@@ -2479,7 +2546,6 @@ func_call (char *o, char **argv, const char *funcname UNUSED)
 {
   static int max_args = 0;
   char *fname;
-  char *cp;
   char *body;
   int flen;
   int i;
@@ -2487,16 +2553,9 @@ func_call (char *o, char **argv, const char *funcname UNUSED)
   const struct function_table_entry *entry_p;
   struct variable *v;
 
-  /* There is no way to define a variable with a space in the name, so strip
-     leading and trailing whitespace as a favor to the user.  */
-  fname = argv[0];
-  while (isspace ((unsigned char)*fname))
-    ++fname;
-
-  cp = fname + strlen (fname) - 1;
-  while (cp > fname && isspace ((unsigned char)*cp))
-    --cp;
-  cp[1] = '\0';
+  /* Clean up the name of the variable to be invoked.  */
+  fname = next_token (argv[0]);
+  end_of_token (fname)[0] = '\0';
 
   /* Calling nothing is a no-op */
   if (*fname == '\0')
@@ -2575,7 +2634,7 @@ func_call (char *o, char **argv, const char *funcname UNUSED)
 }
 
 void
-define_new_function (const gmk_floc *flocp, const char *name,
+define_new_function (const floc *flocp, const char *name,
                      unsigned int min, unsigned int max, unsigned int flags,
                      gmk_func_ptr func)
 {
@@ -2595,10 +2654,10 @@ define_new_function (const gmk_floc *flocp, const char *name,
     OS (fatal, flocp, _("Function name too long: %s"), name);
   if (min > 255)
     ONS (fatal, flocp,
-         _("Invalid minimum argument count (%d) for function %s"), min, name);
+         _("Invalid minimum argument count (%u) for function %s"), min, name);
   if (max > 255 || (max && max < min))
     ONS (fatal, flocp,
-         _("Invalid maximum argument count (%d) for function %s"), max, name);
+         _("Invalid maximum argument count (%u) for function %s"), max, name);
 
   ent = xmalloc (sizeof (struct function_table_entry));
   ent->name = name;
index a755b6d..10ae56a 100644 (file)
@@ -1,5 +1,5 @@
 /* Get the system load averages.
-Copyright (C) 1985-2014 Free Software Foundation, Inc.
+Copyright (C) 1985-2016 Free Software Foundation, Inc.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
 terms of the GNU General Public License as published by the Free Software
index a8051fc..e3538d4 100644 (file)
--- a/getopt.c
+++ b/getopt.c
@@ -3,7 +3,7 @@ NOTE: getopt is now part of the C library, so if you don't know what
 "Keep this file name-space clean" means, talk to drepper@gnu.org
 before changing it!
 
-Copyright (C) 1987-2014 Free Software Foundation, Inc.
+Copyright (C) 1987-2016 Free Software Foundation, Inc.
 
 NOTE: The canonical source of this file is maintained with the GNU C Library.
 Bugs can be reported to bug-glibc@gnu.org.
index adef9a5..4acd4ee 100644 (file)
--- a/getopt.h
+++ b/getopt.h
@@ -1,5 +1,5 @@
 /* Declarations for getopt.
-Copyright (C) 1989-2014 Free Software Foundation, Inc.
+Copyright (C) 1989-2016 Free Software Foundation, Inc.
 
 NOTE: The canonical source of this file is maintained with the GNU C Library.
 Bugs can be reported to bug-glibc@gnu.org.
index 42dea22..0e38b2f 100644 (file)
--- a/getopt1.c
+++ b/getopt1.c
@@ -1,5 +1,5 @@
 /* getopt_long and getopt_long_only entry points for GNU getopt.
-Copyright (C) 1987-1994, 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1987-1994, 1996-2016 Free Software Foundation, Inc.
 
 NOTE: The canonical source of this file is maintained with the GNU C Library.
 Bugs can be reported to bug-glibc@gnu.org.
index c2030ff..c48ffa0 100644 (file)
--- a/gettext.h
+++ b/gettext.h
@@ -1,5 +1,5 @@
 /* Convenience header for conditional use of GNU <libintl.h>.
-Copyright (C) 1995-2014 Free Software Foundation, Inc.
+Copyright (C) 1995-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 7a63861..39761c5 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # this program.  If not, see <http://www.gnu.org/licenses/>.
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -97,19 +107,19 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = glob
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/config/depcomp COPYING.LIB ChangeLog
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/dospaths.m4 \
        $(top_srcdir)/config/gettext.m4 $(top_srcdir)/config/iconv.m4 \
        $(top_srcdir)/config/intlmacosx.m4 \
        $(top_srcdir)/config/lib-ld.m4 \
        $(top_srcdir)/config/lib-link.m4 \
-       $(top_srcdir)/config/lib-prefix.m4 $(top_srcdir)/config/nls.m4 \
+       $(top_srcdir)/config/lib-prefix.m4 \
+       $(top_srcdir)/config/longlong.m4 $(top_srcdir)/config/nls.m4 \
        $(top_srcdir)/config/po.m4 $(top_srcdir)/config/progtest.m4 \
        $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -178,6 +188,8 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       COPYING.LIB ChangeLog
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
@@ -250,6 +262,7 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
 REMOTE = @REMOTE@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
@@ -301,6 +314,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -333,7 +347,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign glob/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign glob/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -583,6 +596,8 @@ uninstall-am:
        mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
        uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
index fa19d3c..e7353f9 100644 (file)
@@ -1,5 +1,5 @@
 ;; Contents of the (gnu make) Guile module
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2016 Free Software Foundation, Inc.
 ;; This file is part of GNU Make.
 ;;
 ;; GNU Make is free software; you can redistribute it and/or modify it under
index fd0b3a4..b508562 100644 (file)
--- a/gnumake.h
+++ b/gnumake.h
@@ -1,7 +1,7 @@
 /* External interfaces usable by dynamic objects loaded into GNU Make.
    --THIS API IS A "TECHNOLOGY PREVIEW" ONLY.  IT IS NOT A STABLE INTERFACE--
 
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
diff --git a/guile.c b/guile.c
index 7c9a015..1b055c3 100644 (file)
--- a/guile.c
+++ b/guile.c
@@ -1,5 +1,5 @@
 /* GNU Guile interface for GNU Make.
-Copyright (C) 2011-2014 Free Software Foundation, Inc.
+Copyright (C) 2011-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -140,7 +140,7 @@ func_guile (const char *funcname UNUSED, unsigned int argc UNUSED, char **argv)
 /* We could send the flocp to define_new_function(), but since guile is
    "kind of" built-in, that didn't seem so useful.  */
 int
-guile_gmake_setup (const gmk_floc *flocp UNUSED)
+guile_gmake_setup (const floc *flocp UNUSED)
 {
   /* Create a make function "guile".  */
   gmk_add_function ("guile", func_guile, 0, 1, GMK_FUNC_DEFAULT);
@@ -151,7 +151,7 @@ guile_gmake_setup (const gmk_floc *flocp UNUSED)
 #else
 
 int
-guile_gmake_setup (const gmk_floc *flocp UNUSED)
+guile_gmake_setup (const floc *flocp UNUSED)
 {
   return 1;
 }
index 8e1d541..ed49bd1 100644 (file)
@@ -1,5 +1,5 @@
 /* Implicit rule searching for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -72,8 +72,7 @@ get_next_word (const char *buffer, unsigned int *length)
   char c;
 
   /* Skip any leading whitespace.  */
-  while (isblank ((unsigned char)*p))
-    ++p;
+  NEXT_TOKEN (p);
 
   beg = p;
   c = *(p++);
@@ -266,12 +265,15 @@ pattern_search (struct file *file, int archive,
       /* Set LASTSLASH to point at the last slash in FILENAME
          but not counting any slash at the end.  (foo/bar/ counts as
          bar/ in directory foo/, not empty in directory foo/bar/.)  */
+      lastslash = strrchr (filename, '/');
 #ifdef VMS
-      lastslash = strrchr (filename, ']');
-      if (lastslash == 0)
+      if (lastslash == NULL)
+        lastslash = strrchr (filename, ']');
+      if (lastslash == NULL)
+        lastslash = strrchr (filename, '>');
+      if (lastslash == NULL)
         lastslash = strrchr (filename, ':');
-#else
-      lastslash = strrchr (filename, '/');
+#endif
 #ifdef HAVE_DOS_PATHS
       /* Handle backslashes (possibly mixed with forward slashes)
          and the case of "d:file".  */
@@ -283,7 +285,6 @@ pattern_search (struct file *file, int archive,
           lastslash = filename + 1;
       }
 #endif
-#endif
       if (lastslash != 0 && lastslash[1] == '\0')
         lastslash = 0;
     }
@@ -315,7 +316,7 @@ pattern_search (struct file *file, int archive,
         {
           const char *target = rule->targets[ti];
           const char *suffix = rule->suffixes[ti];
-          int check_lastslash;
+          char check_lastslash;
 
           /* Rules that can match any filename and are not terminal
              are ignored if we're recursing, so that they cannot be
@@ -339,10 +340,10 @@ pattern_search (struct file *file, int archive,
           if (lastslash)
             {
 #ifdef VMS
-              check_lastslash = (strchr (target, ']') == 0
-                                 && strchr (target, ':') == 0);
+              check_lastslash = strpbrk (target, "/]>:") == NULL;
 #else
               check_lastslash = strchr (target, '/') == 0;
+#endif
 #ifdef HAVE_DOS_PATHS
               /* Didn't find it yet: check for DOS-type directories.  */
               if (check_lastslash)
@@ -351,7 +352,6 @@ pattern_search (struct file *file, int archive,
                   check_lastslash = !(b || (target[0] && target[1] == ':'));
                 }
 #endif
-#endif
             }
           if (check_lastslash)
             {
@@ -437,7 +437,7 @@ pattern_search (struct file *file, int archive,
       for (ri = 0; ri < nrules; ri++)
         {
           struct dep *dep;
-          int check_lastslash;
+          char check_lastslash;
           unsigned int failed = 0;
           int file_variables_set = 0;
           unsigned int deps_found = 0;
@@ -863,9 +863,10 @@ pattern_search (struct file *file, int archive,
 
           /* We don't want to delete an intermediate file that happened
              to be a prerequisite of some (other) target. Mark it as
-             precious.  */
+             secondary.  We don't want it to be precious as that disables
+             DELETE_ON_ERROR etc.  */
           if (f != 0)
-            f->precious = 1;
+            f->secondary = 1;
           else
             f = enter_file (imf->name);
 
diff --git a/job.c b/job.c
index 2989249..f3a9fdb 100644 (file)
--- a/job.c
+++ b/job.c
@@ -1,5 +1,5 @@
 /* Job execution and handling for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -23,7 +23,7 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "filedef.h"
 #include "commands.h"
 #include "variable.h"
-#include "debug.h"
+#include "os.h"
 
 #include <string.h>
 
@@ -59,13 +59,19 @@ int batch_mode_shell = 0;
 #elif defined (VMS)
 
 # include <descrip.h>
+# include <stsdef.h>
 const char *default_shell = "";
 int batch_mode_shell = 0;
 
-#elif defined (__riscos__)
+#define strsignal vms_strsignal
+char * vms_strsignal (int status);
 
-const char *default_shell = "";
-int batch_mode_shell = 0;
+#ifndef C_FACILITY_NO
+# define C_FACILITY_NO 0x350000
+#endif
+#ifndef VMS_POSIX_EXIT_MASK
+# define VMS_POSIX_EXIT_MASK (C_FACILITY_NO | 0xA000)
+#endif
 
 #else
 
@@ -201,14 +207,10 @@ pid2str (pid_t pid)
   return pidstring;
 }
 
+#ifndef HAVE_GETLOADAVG
 int getloadavg (double loadavg[], int nelem);
-int start_remote_job (char **argv, char **envp, int stdin_fd, int *is_remote,
-                      int *id_ptr, int *used_stdin);
-int start_remote_job_p (int);
-int remote_status (int *exit_code_ptr, int *signal_ptr, int *coredump_ptr,
-                   int block);
+#endif
 
-RETSIGTYPE child_handler (int);
 static void free_child (struct child *);
 static void start_job_command (struct child *child);
 static int load_too_high (void);
@@ -472,9 +474,9 @@ child_error (struct child *child,
   const char *post = "";
   const char *dump = "";
   const struct file *f = child->file;
-  const gmk_floc *flocp = &f->cmds->fileinfo;
+  const floc *flocp = &f->cmds->fileinfo;
   const char *nm;
-  size_t l = strlen (f->name);
+  size_t l;
 
   if (ignored && silent_flag)
     return;
@@ -493,42 +495,25 @@ child_error (struct child *child,
   else
     {
       char *a = alloca (strlen (flocp->filenm) + 1 + 11 + 1);
-      sprintf (a, "%s:%lu", flocp->filenm, flocp->lineno);
+      sprintf (a, "%s:%lu", flocp->filenm, flocp->lineno + flocp->offset);
       nm = a;
     }
 
-  OUTPUT_SET (&child->output);
+  l = strlen (pre) + strlen (nm) + strlen (f->name) + strlen (post);
 
-  message (0, l + strlen (nm),
-           _("%s: recipe for target '%s' failed"), nm, f->name);
+  OUTPUT_SET (&child->output);
 
-  l += strlen (pre) + strlen (post);
+  show_goal_error ();
 
-#ifdef VMS
-  if ((exit_code & 1) != 0)
-    {
-      OUTPUT_UNSET ();
-      return;
-    }
-  /* Check for a Posix compatible VMS style exit code:
-     decode and print the Posix exit code */
-  if ((exit_code & 0x35a000) == 0x35a000)
-    error(NILF, l + INTSTR_LENGTH, _("%s[%s] Error %d%s"), pre, f->name,
-        ((exit_code & 0x7f8) >> 3), post);
-  else
-    error(NILF, l + INTSTR_LENGTH, _("%s[%s] Error 0x%x%s"), pre, f->name,
-        exit_code, post);
-#else
   if (exit_sig == 0)
     error (NILF, l + INTSTR_LENGTH,
-           _("%s[%s] Error %d%s"), pre, f->name, exit_code, post);
+           _("%s[%s: %s] Error %d%s"), pre, nm, f->name, exit_code, post);
   else
     {
       const char *s = strsignal (exit_sig);
       error (NILF, l + strlen (s) + strlen (dump),
-             _("%s[%s] %s%s%s"), pre, f->name, s, dump, post);
+             "%s[%s: %s] %s%s%s", pre, nm, f->name, s, dump, post);
     }
-#endif /* VMS */
 
   OUTPUT_UNSET ();
 }
@@ -536,10 +521,11 @@ child_error (struct child *child,
 
 /* Handle a dead child.  This handler may or may not ever be installed.
 
-   If we're using the jobserver feature, we need it.  First, installing it
-   ensures the read will interrupt on SIGCHLD.  Second, we close the dup'd
-   read FD to ensure we don't enter another blocking read without reaping all
-   the dead children.  In this case we don't need the dead_children count.
+   If we're using the jobserver feature without pselect(), we need it.
+   First, installing it ensures the read will interrupt on SIGCHLD.  Second,
+   we close the dup'd read FD to ensure we don't enter another blocking read
+   without reaping all the dead children.  In this case we don't need the
+   dead_children count.
 
    If we don't have either waitpid or wait3, then make is unreliable, but we
    use the dead_children count to reap children as best we can.  */
@@ -551,23 +537,15 @@ child_handler (int sig UNUSED)
 {
   ++dead_children;
 
-  if (job_rfd >= 0)
-    {
-      close (job_rfd);
-      job_rfd = -1;
-    }
+  jobserver_signal ();
 
 #ifdef __EMX__
   /* The signal handler must called only once! */
   signal (SIGCHLD, SIG_DFL);
 #endif
-
-  /* This causes problems if the SIGCHLD interrupts a printf().
-  DB (DB_JOBS, (_("Got a SIGCHLD; %u unreaped children.\n"), dead_children));
-  */
 }
 
-extern int shell_function_pid, shell_function_completed;
+extern pid_t shell_function_pid;
 
 /* Reap all dead children, storing the returned status and the new command
    state ('cs_finished') in the 'file' member of the 'struct child' for the
@@ -602,7 +580,7 @@ reap_children (int block, int err)
   while ((children != 0 || shell_function_pid != 0)
          && (block || REAP_MORE))
     {
-      int remote = 0;
+      unsigned int remote = 0;
       pid_t pid;
       int exit_code, exit_sig, coredump;
       struct child *lastc, *c;
@@ -678,15 +656,24 @@ reap_children (int block, int err)
           if (any_local)
             {
 #ifdef VMS
+              /* Todo: This needs more untangling multi-process support */
+              /* Just do single child process support now */
               vmsWaitForChildren (&status);
               pid = c->pid;
+
+              /* VMS failure status can not be fully translated */
+              status = $VMS_STATUS_SUCCESS (c->cstatus) ? 0 : (1 << 8);
+
+              /* A Posix failure can be exactly translated */
+              if ((c->cstatus & VMS_POSIX_EXIT_MASK) == VMS_POSIX_EXIT_MASK)
+                status = (c->cstatus >> 3 & 255) << 8;
 #else
 #ifdef WAIT_NOHANG
               if (!block)
                 pid = WAIT_NOHANG (&status);
               else
 #endif
-                EINTRLOOP(pid, wait (&status));
+                EINTRLOOP (pid, wait (&status));
 #endif /* !VMS */
             }
           else
@@ -816,16 +803,10 @@ reap_children (int block, int err)
       /* Check if this is the child of the 'shell' function.  */
       if (!remote && pid == shell_function_pid)
         {
-          /* It is.  Leave an indicator for the 'shell' function.  */
-          if (exit_sig == 0 && exit_code == 127)
-            shell_function_completed = -1;
-          else
-            shell_function_completed = 1;
+          shell_completed (exit_code, exit_sig);
           break;
         }
 
-      child_failed = exit_sig != 0 || exit_code != 0;
-
       /* Search for a child matching the deceased one.  */
       lastc = 0;
       for (c = children; c != 0; lastc = c, c = c->next)
@@ -837,6 +818,15 @@ reap_children (int block, int err)
            Ignore it; it was inherited from our invoker.  */
         continue;
 
+      /* Determine the failure status: 0 for success, 1 for updating target in
+         question mode, 2 for anything else.  */
+      if (exit_sig == 0 && exit_code == 0)
+        child_failed = MAKE_SUCCESS;
+      else if (exit_sig == 0 && exit_code == 1 && question_flag && c->recursive)
+        child_failed = MAKE_TROUBLE;
+      else
+        child_failed = MAKE_FAILURE;
+
       DB (DB_JOBS, (child_failed
                     ? _("Reaping losing child %p PID %s %s\n")
                     : _("Reaping winning child %p PID %s %s\n"),
@@ -872,10 +862,10 @@ reap_children (int block, int err)
              delete non-precious targets, and abort.  */
           static int delete_on_error = -1;
 
-          if (!dontcare)
+          if (!dontcare && child_failed == MAKE_FAILURE)
             child_error (c, exit_code, exit_sig, coredump, 0);
 
-          c->file->update_status = us_failed;
+          c->file->update_status = child_failed == MAKE_FAILURE ? us_failed : us_question;
           if (delete_on_error == -1)
             {
               struct file *f = lookup_file (".DELETE_ON_ERROR");
@@ -987,7 +977,7 @@ reap_children (int block, int err)
       if (!err && child_failed && !dontcare && !keep_going_flag &&
           /* fatal_error_signal will die with the right signal.  */
           !handling_fatal_signal)
-        die (MAKE_FAILURE);
+        die (child_failed);
 
       /* Only block for one child.  */
       block = 0;
@@ -1010,35 +1000,12 @@ free_child (struct child *child)
   /* If we're using the jobserver and this child is not the only outstanding
      job, put a token back into the pipe for it.  */
 
-#ifdef WINDOWS32
-  if (has_jobserver_semaphore () && jobserver_tokens > 1)
+  if (jobserver_enabled () && jobserver_tokens > 1)
     {
-      if (! release_jobserver_semaphore ())
-        {
-          DWORD err = GetLastError ();
-          const char *estr = map_windows32_error_to_string (err);
-          ONS (fatal, NILF,
-               _("release jobserver semaphore: (Error %ld: %s)"), err, estr);
-        }
-
-      DB (DB_JOBS, (_("Released token for child %p (%s).\n"), child, child->file->name));
-    }
-#else
-  if (job_fds[1] >= 0 && jobserver_tokens > 1)
-    {
-      char token = '+';
-      int r;
-
-      /* Write a job token back to the pipe.  */
-
-      EINTRLOOP (r, write (job_fds[1], &token, 1));
-      if (r != 1)
-        pfatal_with_name (_("write jobserver"));
-
+      jobserver_release (1);
       DB (DB_JOBS, (_("Released token for child %p (%s).\n"),
                     child, child->file->name));
     }
-#endif
 
   --jobserver_tokens;
 
@@ -1090,56 +1057,6 @@ unblock_sigs (void)
 }
 #endif
 
-#if defined(MAKE_JOBSERVER) && !defined(WINDOWS32)
-RETSIGTYPE
-job_noop (int sig UNUSED)
-{
-}
-/* Set the child handler action flags to FLAGS.  */
-static void
-set_child_handler_action_flags (int set_handler, int set_alarm)
-{
-  struct sigaction sa;
-
-#ifdef __EMX__
-  /* The child handler must be turned off here.  */
-  signal (SIGCHLD, SIG_DFL);
-#endif
-
-  memset (&sa, '\0', sizeof sa);
-  sa.sa_handler = child_handler;
-  sa.sa_flags = set_handler ? 0 : SA_RESTART;
-#if defined SIGCHLD
-  sigaction (SIGCHLD, &sa, NULL);
-#endif
-#if defined SIGCLD && SIGCLD != SIGCHLD
-  sigaction (SIGCLD, &sa, NULL);
-#endif
-#if defined SIGALRM
-  if (set_alarm)
-    {
-      /* If we're about to enter the read(), set an alarm to wake up in a
-         second so we can check if the load has dropped and we can start more
-         work.  On the way out, turn off the alarm and set SIG_DFL.  */
-      if (set_handler)
-        {
-          sa.sa_handler = job_noop;
-          sa.sa_flags = 0;
-          sigaction (SIGALRM, &sa, NULL);
-          alarm (1);
-        }
-      else
-        {
-          alarm (0);
-          sa.sa_handler = SIG_DFL;
-          sa.sa_flags = 0;
-          sigaction (SIGALRM, &sa, NULL);
-        }
-    }
-#endif
-}
-#endif
-
 
 /* Start a job to run the commands specified in CHILD.
    CHILD is updated to reflect the commands and ID of the child process.
@@ -1151,17 +1068,12 @@ set_child_handler_action_flags (int set_handler, int set_alarm)
 static void
 start_job_command (struct child *child)
 {
-#if !defined(_AMIGA) && !defined(WINDOWS32)
-  static int bad_stdin = -1;
-#endif
   int flags;
   char *p;
 #ifdef VMS
   char *argv;
 #else
   char **argv;
-  int outfd = FD_STDOUT;
-  int errfd = FD_STDERR;
 #endif
 
   /* If we have a completely empty commandset, stop now.  */
@@ -1184,19 +1096,21 @@ start_job_command (struct child *child)
         flags |= COMMANDS_RECURSE;
       else if (*p == '-')
         child->noerror = 1;
-      else if (!isblank ((unsigned char)*p))
+      /* Don't skip newlines.  */
+      else if (!ISBLANK (*p))
         break;
       ++p;
     }
 
+  child->recursive = ((flags & COMMANDS_RECURSE) != 0);
+
   /* Update the file's command flags with any new ones we found.  We only
      keep the COMMANDS_RECURSE setting.  Even this isn't 100% correct; we are
      now marking more commands recursive than should be in the case of
      multiline define/endef scripts where only one line is marked "+".  In
      order to really fix this, we'll have to keep a lines_flags for every
      actual line, after expansion.  */
-  child->file->cmds->lines_flags[child->command_line - 1]
-    |= flags & COMMANDS_RECURSE;
+  child->file->cmds->lines_flags[child->command_line - 1] |= flags & COMMANDS_RECURSE;
 
   /* POSIX requires that a recipe prefix after a backslash-newline should
      be ignored.  Remove it now so the output is correct.  */
@@ -1218,6 +1132,19 @@ start_job_command (struct child *child)
   {
     char *end = 0;
 #ifdef VMS
+    /* Skip any leading whitespace */
+    while (*p)
+      {
+        if (!ISSPACE (*p))
+          {
+            if (*p != '\\')
+              break;
+            if ((p[1] != '\n') && (p[1] != 'n') && (p[1] != 't'))
+              break;
+          }
+        p++;
+      }
+
     argv = p;
     /* Although construct_command_argv contains some code for VMS, it was/is
        not called/used.  Please note, for VMS argv is a string (not an array
@@ -1267,9 +1194,17 @@ start_job_command (struct child *child)
       free (argv[0]);
       free (argv);
 #endif
-      child->file->update_status = us_question;
-      notice_finished_file (child->file);
-      return;
+#ifdef VMS
+      /* On VMS, argv[0] can be a null string here */
+      if (argv[0] != 0)
+        {
+#endif
+          child->file->update_status = us_question;
+          notice_finished_file (child->file);
+          return;
+#ifdef VMS
+        }
+#endif
     }
 
   if (touch_flag && !(flags & COMMANDS_RECURSE))
@@ -1383,32 +1318,6 @@ start_job_command (struct child *child)
   fflush (stdout);
   fflush (stderr);
 
-#ifndef VMS
-#if !defined(WINDOWS32) && !defined(_AMIGA) && !defined(__MSDOS__)
-
-  /* Set up a bad standard input that reads from a broken pipe.  */
-
-  if (bad_stdin == -1)
-    {
-      /* Make a file descriptor that is the read end of a broken pipe.
-         This will be used for some children's standard inputs.  */
-      int pd[2];
-      if (pipe (pd) == 0)
-        {
-          /* Close the write side.  */
-          (void) close (pd[1]);
-          /* Save the read side.  */
-          bad_stdin = pd[0];
-
-          /* Set the descriptor to close on exec, so it does not litter any
-             child's descriptor table.  When it is dup2'd onto descriptor 0,
-             that descriptor will not close on exec.  */
-          CLOSE_ON_EXEC (bad_stdin);
-        }
-    }
-
-#endif /* !WINDOWS32 && !_AMIGA && !__MSDOS__ */
-
   /* Decide whether to give this child the 'good' standard input
      (one that points to the terminal or whatever), or the 'bad' one
      that points to the read side of a broken pipe.  */
@@ -1417,8 +1326,6 @@ start_job_command (struct child *child)
   if (child->good_stdin)
     good_stdin_used = 1;
 
-#endif /* !VMS */
-
   child->deleted = 0;
 
 #ifndef _AMIGA
@@ -1435,7 +1342,7 @@ start_job_command (struct child *child)
     {
       int is_remote, id, used_stdin;
       if (start_remote_job (argv, child->environment,
-                            child->good_stdin ? 0 : bad_stdin,
+                            child->good_stdin ? 0 : get_bad_stdin (),
                             &is_remote, &id, &used_stdin))
         /* Don't give up; remote execution may fail for various reasons.  If
            so, simply run the job locally.  */
@@ -1464,7 +1371,7 @@ start_job_command (struct child *child)
       child->remote = 0;
 
 #ifdef VMS
-      if (!child_execute_job (argv, child))
+      if (!child_execute_job (child, argv))
         {
           /* Fork failed!  */
           perror_with_name ("fork", "");
@@ -1475,83 +1382,20 @@ start_job_command (struct child *child)
 
       parent_environ = environ;
 
-#ifndef NO_OUTPUT_SYNC
-      /* Divert child output if output_sync in use.  */
-      if (child->output.syncout)
-        {
-          if (child->output.out >= 0)
-            outfd = child->output.out;
-          if (child->output.err >= 0)
-            errfd = child->output.err;
-        }
-#endif
-# ifdef __EMX__
-      /* If we aren't running a recursive command and we have a jobserver
-         pipe, close it before exec'ing.  */
-      if (!(flags & COMMANDS_RECURSE) && job_fds[0] >= 0)
-        {
-          CLOSE_ON_EXEC (job_fds[0]);
-          CLOSE_ON_EXEC (job_fds[1]);
-        }
-      if (job_rfd >= 0)
-        CLOSE_ON_EXEC (job_rfd);
-
-      /* Never use fork()/exec() here! Use spawn() instead in exec_command() */
-      child->pid = child_execute_job (child->good_stdin ? FD_STDIN : bad_stdin,
-                                      outfd, errfd,
-                                      argv, child->environment);
-      if (child->pid < 0)
-        {
-          /* spawn failed!  */
-          unblock_sigs ();
-          perror_with_name ("spawn", "");
-          goto error;
-        }
+      jobserver_pre_child (flags & COMMANDS_RECURSE);
 
-      /* undo CLOSE_ON_EXEC() after the child process has been started */
-      if (!(flags & COMMANDS_RECURSE) && job_fds[0] >= 0)
-        {
-          fcntl (job_fds[0], F_SETFD, 0);
-          fcntl (job_fds[1], F_SETFD, 0);
-        }
-      if (job_rfd >= 0)
-        fcntl (job_rfd, F_SETFD, 0);
+      child->pid = child_execute_job (&child->output, child->good_stdin, argv, child->environment);
 
-#else  /* !__EMX__ */
-
-      child->pid = fork ();
       environ = parent_environ; /* Restore value child may have clobbered.  */
-      if (child->pid == 0)
-        {
-          /* We are the child side.  */
-          unblock_sigs ();
-
-          /* If we aren't running a recursive command and we have a jobserver
-             pipe, close it before exec'ing.  */
-          if (!(flags & COMMANDS_RECURSE) && job_fds[0] >= 0)
-            {
-              close (job_fds[0]);
-              close (job_fds[1]);
-            }
-          if (job_rfd >= 0)
-            close (job_rfd);
+      jobserver_post_child (flags & COMMANDS_RECURSE);
 
-#ifdef SET_STACK_SIZE
-          /* Reset limits, if necessary.  */
-          if (stack_limit.rlim_cur)
-            setrlimit (RLIMIT_STACK, &stack_limit);
-#endif
-          child_execute_job (child->good_stdin ? FD_STDIN : bad_stdin,
-                             outfd, errfd, argv, child->environment);
-        }
-      else if (child->pid < 0)
+      if (child->pid < 0)
         {
           /* Fork failed!  */
           unblock_sigs ();
           perror_with_name ("fork", "");
           goto error;
         }
-# endif  /* !__EMX__ */
 #endif /* !VMS */
     }
 
@@ -1627,6 +1471,8 @@ start_job_command (struct child *child)
   {
       HANDLE hPID;
       char* arg0;
+      int outfd = FD_STDOUT;
+      int errfd = FD_STDERR;
 
       /* make UNC paths safe for CreateProcess -- backslash format */
       arg0 = argv[0];
@@ -1864,14 +1710,13 @@ new_job (struct file *file)
                         *out++ = *in++;
                       else
                         {
-                          /* Skip the backslash, newline and
-                             any following whitespace.  */
-                          in = next_token (in + 2);
+                          /* Skip the backslash, newline, and whitespace.  */
+                          in += 2;
+                          NEXT_TOKEN (in);
 
                           /* Discard any preceding whitespace that has
                              already been written to the output.  */
-                          while (out > outref
-                                 && isblank ((unsigned char)out[-1]))
+                          while (out > outref && ISBLANK (out[-1]))
                             --out;
 
                           /* Replace it all with a single space.  */
@@ -1895,10 +1740,12 @@ new_job (struct file *file)
         memmove (out, in, strlen (in) + 1);
 
       /* Finally, expand the line.  */
+      cmds->fileinfo.offset = i;
       lines[i] = allocated_variable_expand_for_file (cmds->command_lines[i],
                                                      file);
     }
 
+  cmds->fileinfo.offset = 0;
   c->command_lines = lines;
 
   /* Fetch the first command line to be run.  */
@@ -1924,18 +1771,10 @@ new_job (struct file *file)
      just once).  Also more thought needs to go into the entire algorithm;
      this is where the old parallel job code waits, so...  */
 
-#ifdef WINDOWS32
-  else if (has_jobserver_semaphore ())
-#else
-  else if (job_fds[0] >= 0)
-#endif
+  else if (jobserver_enabled ())
     while (1)
       {
         int got_token;
-#ifndef WINDOWS32
-        char token;
-        int saved_errno;
-#endif
 
         DB (DB_JOBS, ("Need a job token; we %shave children\n",
                       children ? "" : "don't "));
@@ -1944,36 +1783,8 @@ new_job (struct file *file)
         if (!jobserver_tokens)
           break;
 
-#ifndef WINDOWS32
-        /* Read a token.  As long as there's no token available we'll block.
-           We enable interruptible system calls before the read(2) so that if
-           we get a SIGCHLD while we're waiting, we'll return with EINTR and
-           we can process the death(s) and return tokens to the free pool.
-
-           Once we return from the read, we immediately reinstate restartable
-           system calls.  This allows us to not worry about checking for
-           EINTR on all the other system calls in the program.
-
-           There is one other twist: there is a span between the time
-           reap_children() does its last check for dead children and the time
-           the read(2) call is entered, below, where if a child dies we won't
-           notice.  This is extremely serious as it could cause us to
-           deadlock, given the right set of events.
-
-           To avoid this, we do the following: before we reap_children(), we
-           dup(2) the read FD on the jobserver pipe.  The read(2) call below
-           uses that new FD.  In the signal handler, we close that FD.  That
-           way, if a child dies during the section mentioned above, the
-           read(2) will be invoked with an invalid FD and will return
-           immediately with EBADF.  */
-
-        /* Make sure we have a dup'd FD.  */
-        if (job_rfd < 0)
-          {
-            DB (DB_JOBS, ("Duplicate the job FD\n"));
-            job_rfd = dup (job_fds[0]);
-          }
-#endif
+        /* Prepare for jobserver token acquisition.  */
+        jobserver_pre_acquire ();
 
         /* Reap anything that's currently waiting.  */
         reap_children (0, 0);
@@ -1982,8 +1793,7 @@ new_job (struct file *file)
            can run now (i.e., waiting for load). */
         start_waiting_jobs ();
 
-        /* If our "free" slot has become available, use it; we don't need an
-           actual token.  */
+        /* If our "free" slot is available, use it; we don't need a token.  */
         if (!jobserver_tokens)
           break;
 
@@ -1992,26 +1802,8 @@ new_job (struct file *file)
         if (!children)
           O (fatal, NILF, "INTERNAL: no children as we go to sleep on read\n");
 
-#ifdef WINDOWS32
-        /* On Windows we simply wait for the jobserver semaphore to become
-         * signalled or one of our child processes to terminate.
-         */
-        got_token = wait_for_semaphore_or_child_process ();
-        if (got_token < 0)
-          {
-            DWORD err = GetLastError ();
-            const char *estr = map_windows32_error_to_string (err);
-            ONS (fatal, NILF,
-                 _("semaphore or child process wait: (Error %ld: %s)"),
-                 err, estr);
-          }
-#else
-        /* Set interruptible system calls, and read() for a job token.  */
-        set_child_handler_action_flags (1, waiting_jobs != NULL);
-        got_token = read (job_rfd, &token, 1);
-        saved_errno = errno;
-        set_child_handler_action_flags (0, waiting_jobs != NULL);
-#endif
+        /* Get a token.  */
+        got_token = jobserver_acquire (waiting_jobs != NULL);
 
         /* If we got one, we're done here.  */
         if (got_token == 1)
@@ -2020,16 +1812,6 @@ new_job (struct file *file)
                           c, c->file->name));
             break;
           }
-
-#ifndef WINDOWS32
-        /* If the error _wasn't_ expected (EINTR or EBADF), punt.  Otherwise,
-           go back and reap_children(), and try again.  */
-        errno = saved_errno;
-        if (errno != EINTR && errno != EBADF)
-          pfatal_with_name (_("read jobs pipe"));
-        if (errno == EBADF)
-          DB (DB_JOBS, ("Read returned EBADF.\n"));
-#endif
       }
 #endif
 
@@ -2088,12 +1870,15 @@ job_next_command (struct child *child)
         {
           /* There are no more lines to be expanded.  */
           child->command_ptr = 0;
+          child->file->cmds->fileinfo.offset = 0;
           return 0;
         }
       else
         /* Get the next line to run.  */
         child->command_ptr = child->command_lines[child->command_line++];
     }
+
+  child->file->cmds->fileinfo.offset = child->command_line - 1;
   return 1;
 }
 
@@ -2233,82 +2018,93 @@ start_waiting_jobs (void)
 /* EMX: Start a child process. This function returns the new pid.  */
 # if defined __EMX__
 int
-child_execute_job (int stdin_fd, int stdout_fd, int stderr_fd,
-                   char **argv, char **envp)
+child_execute_job (struct output *out, int good_stdin, char **argv, char **envp)
 {
   int pid;
-  int save_stdin = -1;
-  int save_stdout = -1;
-  int save_stderr = -1;
+  int fdin = good_stdin ? FD_STDIN : get_bad_stdin ();
+  int fdout = FD_STDOUT;
+  int fderr = FD_STDERR;
+  int save_fdin = -1;
+  int save_fdout = -1;
+  int save_fderr = -1;
+
+  /* Divert child output if we want to capture output.  */
+  if (out && out->syncout)
+    {
+      if (out->out >= 0)
+        fdout = out->out;
+      if (out->err >= 0)
+        fderr = out->err;
+    }
 
   /* For each FD which needs to be redirected first make a dup of the standard
      FD to save and mark it close on exec so our child won't see it.  Then
      dup2() the standard FD to the redirect FD, and also mark the redirect FD
      as close on exec. */
-  if (stdin_fd != FD_STDIN)
+  if (fdin != FD_STDIN)
     {
-      save_stdin = dup (FD_STDIN);
-      if (save_stdin < 0)
+      save_fdin = dup (FD_STDIN);
+      if (save_fdin < 0)
         O (fatal, NILF, _("no more file handles: could not duplicate stdin\n"));
-      CLOSE_ON_EXEC (save_stdin);
+      CLOSE_ON_EXEC (save_fdin);
 
-      dup2 (stdin_fd, FD_STDIN);
-      CLOSE_ON_EXEC (stdin_fd);
+      dup2 (fdin, FD_STDIN);
+      CLOSE_ON_EXEC (fdin);
     }
 
-  if (stdout_fd != FD_STDOUT)
+  if (fdout != FD_STDOUT)
     {
-      save_stdout = dup (FD_STDOUT);
-      if (save_stdout < 0)
+      save_fdout = dup (FD_STDOUT);
+      if (save_fdout < 0)
         O (fatal, NILF,
            _("no more file handles: could not duplicate stdout\n"));
-      CLOSE_ON_EXEC (save_stdout);
+      CLOSE_ON_EXEC (save_fdout);
 
-      dup2 (stdout_fd, FD_STDOUT);
-      CLOSE_ON_EXEC (stdout_fd);
+      dup2 (fdout, FD_STDOUT);
+      CLOSE_ON_EXEC (fdout);
     }
 
-  if (stderr_fd != FD_STDERR)
+  if (fderr != FD_STDERR)
     {
-      if (stderr_fd != stdout_fd)
+      if (fderr != fdout)
         {
-          save_stderr = dup (FD_STDERR);
-          if (save_stderr < 0)
+          save_fderr = dup (FD_STDERR);
+          if (save_fderr < 0)
             O (fatal, NILF,
                _("no more file handles: could not duplicate stderr\n"));
-          CLOSE_ON_EXEC (save_stderr);
+          CLOSE_ON_EXEC (save_fderr);
         }
 
-      dup2 (stderr_fd, FD_STDERR);
-      CLOSE_ON_EXEC (stderr_fd);
+      dup2 (fderr, FD_STDERR);
+      CLOSE_ON_EXEC (fderr);
     }
 
   /* Run the command.  */
   pid = exec_command (argv, envp);
 
   /* Restore stdout/stdin/stderr of the parent and close temporary FDs.  */
-  if (save_stdin >= 0)
+  if (save_fdin >= 0)
     {
-      if (dup2 (save_stdin, FD_STDIN) != FD_STDIN)
+      if (dup2 (save_fdin, FD_STDIN) != FD_STDIN)
         O (fatal, NILF, _("Could not restore stdin\n"));
       else
-        close (save_stdin);
+        close (save_fdin);
     }
 
-  if (save_stdout >= 0)
+  if (save_fdout >= 0)
     {
-      if (dup2 (save_stdout, FD_STDOUT) != FD_STDOUT)
+      if (dup2 (save_fdout, FD_STDOUT) != FD_STDOUT)
         O (fatal, NILF, _("Could not restore stdout\n"));
       else
-        close (save_stdout);
+        close (save_fdout);
     }
 
-  if (save_stderr >= 0)
+  if (save_fderr >= 0)
     {
-      if (dup2 (save_stderr, FD_STDERR) != FD_STDERR)
+      if (dup2 (save_fderr, FD_STDERR) != FD_STDERR)
         O (fatal, NILF, _("Could not restore stderr\n"));
       else
-        close (save_stderr);
+        close (save_fderr);
     }
 
   return pid;
@@ -2316,30 +2112,48 @@ child_execute_job (int stdin_fd, int stdout_fd, int stderr_fd,
 
 #elif !defined (_AMIGA) && !defined (__MSDOS__) && !defined (VMS)
 
-/* UNIX:
-   Replace the current process with one executing the command in ARGV.
-   STDIN_FD/STDOUT_FD/STDERR_FD are used as the process's stdin/stdout/stderr;
-   ENVP is the environment of the new program.  This function does not return.  */
-void
-child_execute_job (int stdin_fd, int stdout_fd, int stderr_fd,
-                   char **argv, char **envp)
+/* POSIX:
+   Create a child process executing the command in ARGV.
+   ENVP is the environment of the new program.  Returns the PID or -1.  */
+int
+child_execute_job (struct output *out, int good_stdin, char **argv, char **envp)
 {
-  /* For any redirected FD, dup2() it to the standard FD then close it.  */
-  if (stdin_fd != FD_STDIN)
+  int r;
+  int pid;
+  int fdin = good_stdin ? FD_STDIN : get_bad_stdin ();
+  int fdout = FD_STDOUT;
+  int fderr = FD_STDERR;
+
+  /* Divert child output if we want to capture it.  */
+  if (out && out->syncout)
     {
-      dup2 (stdin_fd, FD_STDIN);
-      close (stdin_fd);
+      if (out->out >= 0)
+        fdout = out->out;
+      if (out->err >= 0)
+        fderr = out->err;
     }
 
-  if (stdout_fd != FD_STDOUT)
-    dup2 (stdout_fd, FD_STDOUT);
-  if (stderr_fd != FD_STDERR)
-    dup2 (stderr_fd, FD_STDERR);
+  pid = vfork();
+  if (pid != 0)
+    return pid;
+
+  /* We are the child.  */
+  unblock_sigs ();
+
+#ifdef SET_STACK_SIZE
+  /* Reset limits, if necessary.  */
+  if (stack_limit.rlim_cur)
+    setrlimit (RLIMIT_STACK, &stack_limit);
+#endif
 
-  if (stdout_fd != FD_STDOUT)
-    close (stdout_fd);
-  if (stderr_fd != FD_STDERR && stderr_fd != stdout_fd)
-    close (stderr_fd);
+  /* For any redirected FD, dup2() it to the standard FD.
+     They are all marked close-on-exec already.  */
+  if (fdin != FD_STDIN)
+    EINTRLOOP (r, dup2 (fdin, FD_STDIN));
+  if (fdout != FD_STDOUT)
+    EINTRLOOP (r, dup2 (fdout, FD_STDOUT));
+  if (fderr != FD_STDERR)
+    EINTRLOOP (r, dup2 (fderr, FD_STDERR));
 
   /* Run the command.  */
   exec_command (argv, envp);
@@ -2455,12 +2269,17 @@ exec_command (char **argv, char **envp)
   switch (errno)
     {
     case ENOENT:
-      OS (error, NILF, _("%s: Command not found"), argv[0]);
+      /* We are in the child: don't use the output buffer.
+         It's not right to run fprintf() here!  */
+      if (makelevel == 0)
+        fprintf (stderr, _("%s: %s: Command not found\n"), program, argv[0]);
+      else
+        fprintf (stderr, _("%s[%u]: %s: Command not found\n"),
+                 program, makelevel, argv[0]);
       break;
     case ENOEXEC:
       {
         /* The file is not executable.  Try it as a shell script.  */
-        extern char *getenv ();
         const char *shell;
         char **new_argv;
         int argc;
@@ -2731,8 +2550,8 @@ construct_command_argv_internal (char *line, char **restp, const char *shell,
   if (restp != NULL)
     *restp = NULL;
 
-  /* Make sure not to bother processing an empty line.  */
-  while (isblank ((unsigned char)*line))
+  /* Make sure not to bother processing an empty line but stop at newline.  */
+  while (ISBLANK (*line))
     ++line;
   if (*line == '\0')
     return 0;
@@ -2863,6 +2682,10 @@ construct_command_argv_internal (char *line, char **restp, const char *shell,
           else if (instring == '"' && strchr ("\\$`", *p) != 0 && unixy_shell)
             goto slow;
 #ifdef WINDOWS32
+          /* Quoted wildcard characters must be passed quoted to the
+             command, so give up the fast route.  */
+          else if (instring == '"' && strchr ("*?", *p) != 0 && !unixy_shell)
+            goto slow;
           else if (instring == '"' && strncmp (p, "\\\"", 2) == 0)
             *ap++ = *++p;
 #endif
@@ -2903,15 +2726,16 @@ construct_command_argv_internal (char *line, char **restp, const char *shell,
                 /* Throw out the backslash and newline.  */
                 ++p;
 
-                /* If there's nothing in this argument yet, skip any
-                   whitespace before the start of the next word.  */
+                /* At the beginning of the argument, skip any whitespace other
+                   than newline before the start of the next word.  */
                 if (ap == new_argv[i])
-                  p = next_token (p + 1) - 1;
+                  while (ISBLANK (p[1]))
+                    ++p;
               }
 #ifdef WINDOWS32
             /* Backslash before whitespace is not special if our shell
                is not Unixy.  */
-            else if (isspace (p[1]) && !unixy_shell)
+            else if (ISSPACE (p[1]) && !unixy_shell)
               {
                 *ap++ = *p;
                 break;
@@ -2938,7 +2762,7 @@ construct_command_argv_internal (char *line, char **restp, const char *shell,
                 else
 #endif
                   if (p[1] != '\\' && p[1] != '\''
-                      && !isspace ((unsigned char)p[1])
+                      && !ISSPACE (p[1])
                       && strchr (sh_chars_sh, p[1]) == 0)
                     /* back up one notch, to copy the backslash */
                     --p;
@@ -3002,8 +2826,9 @@ construct_command_argv_internal (char *line, char **restp, const char *shell,
                   }
               }
 
-            /* Ignore multiple whitespace chars.  */
-            p = next_token (p) - 1;
+            /* Skip whitespace chars, but not newlines.  */
+            while (ISBLANK (p[1]))
+              ++p;
             break;
 
           default:
@@ -3096,8 +2921,7 @@ construct_command_argv_internal (char *line, char **restp, const char *shell,
    */
 
   /* Make sure not to bother processing an empty line.  */
-  while (isspace ((unsigned char)*line))
-    ++line;
+  NEXT_TOKEN (line);
   if (*line == '\0')
     return 0;
 #endif /* WINDOWS32 */
@@ -3157,9 +2981,9 @@ construct_command_argv_internal (char *line, char **restp, const char *shell,
               {
                 int esc = 0;
 
-                /* This is the start of a new recipe line.
-                   Skip whitespace and prefix characters.  */
-                while (isblank (*f) || *f == '-' || *f == '@' || *f == '+')
+                /* This is the start of a new recipe line.  Skip whitespace
+                   and prefix characters but not newlines.  */
+                while (ISBLANK (*f) || *f == '-' || *f == '@' || *f == '+')
                   ++f;
 
                 /* Copy until we get to the next logical recipe line.  */
@@ -3209,21 +3033,21 @@ construct_command_argv_internal (char *line, char **restp, const char *shell,
                [@+-]: they're meaningless in .ONESHELL mode.  */
             while (*f != '\0')
               {
-                /* This is the start of a new recipe line.
-                   Skip whitespace and prefix characters.  */
-                while (isblank (*f) || *f == '-' || *f == '@' || *f == '+')
+                /* This is the start of a new recipe line.  Skip whitespace
+                   and prefix characters but not newlines.  */
+                while (ISBLANK (*f) || *f == '-' || *f == '@' || *f == '+')
                   ++f;
 
                 /* Copy until we get to the next logical recipe line.  */
                 while (*f != '\0')
                   {
-                    /* Remove the escaped newlines in the command, and
-                       the whitespace that follows them.  Windows
-                       shells cannot handle escaped newlines.  */
+                    /* Remove the escaped newlines in the command, and the
+                       blanks that follow them.  Windows shells cannot handle
+                       escaped newlines.  */
                     if (*f == '\\' && f[1] == '\n')
                       {
                         f += 2;
-                        while (isblank (*f))
+                        while (ISBLANK (*f))
                           ++f;
                       }
                     *(t++) = *(f++);
@@ -3235,7 +3059,7 @@ construct_command_argv_internal (char *line, char **restp, const char *shell,
                 /* Write another line into the batch file.  */
                 if (t > tstart)
                   {
-                    int c = *t;
+                    char c = *t;
                     *t = '\0';
                     fputs (tstart, batch);
                     DB (DB_JOBS, ("\t%s", tstart));
@@ -3335,7 +3159,7 @@ construct_command_argv_internal (char *line, char **restp, const char *shell,
         /* DOS shells don't know about backslash-escaping.  */
         if (unixy_shell && !batch_mode_shell &&
             (*p == '\\' || *p == '\'' || *p == '"'
-             || isspace ((unsigned char)*p)
+             || ISSPACE (*p)
              || strchr (sh_chars, *p) != 0))
           *ap++ = '\\';
 #ifdef __MSDOS__
@@ -3540,13 +3364,11 @@ construct_command_argv (char *line, char **restp, struct file *file,
   cptr = line;
   for (;;)
     {
-      while ((*cptr != 0)
-             && (isspace ((unsigned char)*cptr)))
+      while ((*cptr != 0) && (ISSPACE (*cptr)))
         cptr++;
       if (*cptr == 0)
         break;
-      while ((*cptr != 0)
-             && (!isspace ((unsigned char)*cptr)))
+      while ((*cptr != 0) && (!ISSPACE (*cptr)))
         cptr++;
       argc++;
     }
@@ -3559,15 +3381,13 @@ construct_command_argv (char *line, char **restp, struct file *file,
   argc = 0;
   for (;;)
     {
-      while ((*cptr != 0)
-             && (isspace ((unsigned char)*cptr)))
+      while ((*cptr != 0) && (ISSPACE (*cptr)))
         cptr++;
       if (*cptr == 0)
         break;
       DB (DB_JOBS, ("argv[%d] = [%s]\n", argc, cptr));
       argv[argc++] = cptr;
-      while ((*cptr != 0)
-             && (!isspace ((unsigned char)*cptr)))
+      while ((*cptr != 0) && (!ISSPACE (*cptr)))
         cptr++;
       if (*cptr != 0)
         *cptr++ = 0;
@@ -3658,7 +3478,7 @@ dup2 (int old, int new)
   int fd;
 
   (void) close (new);
-  fd = dup (old);
+  EINTRLOOP (fd, dup (old));
   if (fd != new)
     {
       (void) close (fd);
diff --git a/job.h b/job.h
index 3c921ba..37cceb6 100644 (file)
--- a/job.h
+++ b/job.h
@@ -1,5 +1,5 @@
 /* Definitions for managing subprocesses in GNU Make.
-Copyright (C) 1992-2014 Free Software Foundation, Inc.
+Copyright (C) 1992-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -24,7 +24,7 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* How to set close-on-exec for a file descriptor.  */
 
-#if !defined F_SETFD
+#if !defined(F_SETFD) || !defined(F_GETFD)
 # ifdef WINDOWS32
 #  define CLOSE_ON_EXEC(_d)  process_noinherit(_d)
 # else
@@ -99,6 +99,7 @@ struct child
     char *comname;              /* Temporary command file name */
     int efn;                    /* Completion event flag number */
     int cstatus;                /* Completion status */
+    int vms_launch_status;      /* non-zero if lib$spawn, etc failed */
 #endif
 
     unsigned int  command_line; /* Index into command_lines.  */
@@ -108,11 +109,14 @@ struct child
     unsigned int  noerror:1;    /* Nonzero if commands contained a '-'.  */
     unsigned int  good_stdin:1; /* Nonzero if this child has a good stdin.  */
     unsigned int  deleted:1;    /* Nonzero if targets have been deleted.  */
+    unsigned int  recursive:1;  /* Nonzero for recursive command ('+' etc.)  */
     unsigned int  dontcare:1;   /* Saved dontcare flag.  */
   };
 
 extern struct child *children;
 
+/* A signal handler for SIGCHLD, if needed.  */
+RETSIGTYPE child_handler (int sig);
 int is_bourne_compatible_shell(const char *path);
 void new_job (struct file *file);
 void reap_children (int block, int err);
@@ -120,20 +124,16 @@ void start_waiting_jobs (void);
 
 char **construct_command_argv (char *line, char **restp, struct file *file,
                                int cmd_flags, char** batch_file);
+
 #ifdef VMS
-int child_execute_job (char *argv, struct child *child);
+int child_execute_job (struct child *child, char *argv);
 #else
 # define FD_STDIN       (fileno (stdin))
 # define FD_STDOUT      (fileno (stdout))
 # define FD_STDERR      (fileno (stderr))
-# if defined(__EMX__)
-int child_execute_job (int stdin_fd, int stdout_fd, int stderr_fd,
-                       char **argv, char **envp);
-# else
-void child_execute_job (int stdin_fd, int stdout_fd, int stderr_fd,
-                        char **argv, char **envp) __attribute__ ((noreturn));
-# endif
+int child_execute_job (struct output *out, int good_stdin, char **argv, char **envp);
 #endif
+
 #ifdef _AMIGA
 void exec_command (char **argv) __attribute__ ((noreturn));
 #elif defined(__EMX__)
diff --git a/load.c b/load.c
index 79294b3..37e7b8e 100644 (file)
--- a/load.c
+++ b/load.c
@@ -1,5 +1,5 @@
 /* Loading dynamic objects for GNU Make.
-Copyright (C) 2012-2014 Free Software Foundation, Inc.
+Copyright (C) 2012-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -45,8 +45,8 @@ struct load_list
 static struct load_list *loaded_syms = NULL;
 
 static load_func_t
-load_object (const gmk_floc *flocp, int noerror,
-             const char *ldname, const char *symname)
+load_object (const floc *flocp, int noerror, const char *ldname,
+             const char *symname)
 {
   static void *global_dl = NULL;
   load_func_t symp;
@@ -119,7 +119,7 @@ load_object (const gmk_floc *flocp, int noerror,
 }
 
 int
-load_file (const gmk_floc *flocp, const char **ldname, int noerror)
+load_file (const floc *flocp, const char **ldname, int noerror)
 {
   int nmlen = strlen (*ldname);
   char *new = alloca (nmlen + CSTRLEN (SYMBOL_EXTENSION) + 1);
@@ -168,9 +168,8 @@ load_file (const gmk_floc *flocp, const char **ldname, int noerror)
   loaded = allocated_variable_expand ("$(.LOADED)");
   fp = strstr (loaded, *ldname);
   r = fp && (fp==loaded || fp[-1]==' ') && (fp[nmlen]=='\0' || fp[nmlen]==' ');
-  free (loaded);
   if (r)
-    return 1;
+    goto exit;
 
   /* If we didn't find a symbol name yet, construct it from the ldname.  */
   if (! symname)
@@ -214,8 +213,21 @@ load_file (const gmk_floc *flocp, const char **ldname, int noerror)
 
   /* If it succeeded, add the load file to the loaded variable.  */
   if (r > 0)
-    do_variable_definition (flocp, ".LOADED", *ldname, o_default, f_append, 0);
+    {
+      size_t loadlen = strlen (loaded);
+      char *newval = alloca (loadlen + strlen (*ldname) + 2);
+      /* Don't add a space if it's empty.  */
+      if (loadlen)
+        {
+          memcpy (newval, loaded, loadlen);
+          newval[loadlen++] = ' ';
+        }
+      strcpy (&newval[loadlen], *ldname);
+      do_variable_definition (flocp, ".LOADED", newval, o_default, f_simple, 0);
+    }
 
+ exit:
+  free (loaded);
   return r;
 }
 
@@ -237,7 +249,7 @@ unload_file (const char *name)
 #else
 
 int
-load_file (const gmk_floc *flocp, const char **ldname, int noerror)
+load_file (const floc *flocp, const char **ldname UNUSED, int noerror)
 {
   if (! noerror)
     O (fatal, flocp,
@@ -247,7 +259,7 @@ load_file (const gmk_floc *flocp, const char **ldname, int noerror)
 }
 
 void
-unload_file (const char *name)
+unload_file (const char *name UNUSED)
 {
   O (fatal, NILF, "INTERNAL: Cannot unload when load is not supported!");
 }
index fb275dd..14b75f8 100644 (file)
--- a/loadapi.c
+++ b/loadapi.c
@@ -1,5 +1,5 @@
 /* API for GNU Make dynamic objects.
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -37,17 +37,29 @@ gmk_free (char *s)
 /* Evaluate a buffer as make syntax.
    Ideally eval_buffer() will take const char *, but not yet.  */
 void
-gmk_eval (const char *buffer, const gmk_floc *floc)
+gmk_eval (const char *buffer, const gmk_floc *gfloc)
 {
   /* Preserve existing variable buffer context.  */
   char *pbuf;
   unsigned int plen;
   char *s;
+  floc fl;
+  floc *flp;
+
+  if (gfloc)
+    {
+      fl.filenm = gfloc->filenm;
+      fl.lineno = gfloc->lineno;
+      fl.offset = 0;
+      flp = &fl;
+    }
+  else
+    flp = NULL;
 
   install_variable_buffer (&pbuf, &plen);
 
   s = xstrdup (buffer);
-  eval_buffer (s, floc);
+  eval_buffer (s, flp);
   free (s);
 
   restore_variable_buffer (pbuf, plen);
diff --git a/main.c b/main.c
index 7f14cba..576f2e9 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,5 +1,5 @@
 /* Argument parsing and main program of GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -15,6 +15,7 @@ You should have received a copy of the GNU General Public License along with
 this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "makeint.h"
+#include "os.h"
 #include "filedef.h"
 #include "dep.h"
 #include "variable.h"
@@ -47,18 +48,41 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #ifdef _AMIGA
 int __stack = 20000; /* Make sure we have 20K of stack space */
 #endif
+#ifdef VMS
+int vms_use_mcr_command = 0;
+int vms_always_use_cmd_file = 0;
+int vms_gnv_shell = 0;
+int vms_legacy_behavior = 0;
+int vms_comma_separator = 0;
+int vms_unix_simulation = 0;
+int vms_report_unix_paths = 0;
+
+/* Evaluates if a VMS environment option is set, only look at first character */
+static int
+get_vms_env_flag (const char *name, int default_value)
+{
+char * value;
+char x;
 
-void init_dir (void);
-void remote_setup (void);
-void remote_cleanup (void);
-RETSIGTYPE fatal_error_signal (int sig);
-
-void print_variable_data_base (void);
-void print_dir_data_base (void);
-void print_rule_data_base (void);
-void print_vpath_data_base (void);
+  value = getenv (name);
+  if (value == NULL)
+    return default_value;
 
-void verify_file_data_base (void);
+  x = toupper (value[0]);
+  switch (x)
+    {
+    case '1':
+    case 'T':
+    case 'E':
+      return 1;
+      break;
+    case '0':
+    case 'F':
+    case 'D':
+      return 0;
+    }
+}
+#endif
 
 #if defined HAVE_WAITPID || defined HAVE_WAIT3
 # define HAVE_WAIT_NOHANG
@@ -223,27 +247,28 @@ struct rlimit stack_limit;
 #endif
 
 
-/* Number of job slots (commands that can be run at once).  */
+/* Number of job slots for parallelism.  */
+
+unsigned int job_slots;
 
-unsigned int job_slots = 1;
-unsigned int default_job_slots = 1;
+#define INVALID_JOB_SLOTS (-1)
 static unsigned int master_job_slots = 0;
+static int arg_job_slots = INVALID_JOB_SLOTS;
 
-/* Value of job_slots that means no limit.  */
+static const int default_job_slots = INVALID_JOB_SLOTS;
 
-static unsigned int inf_jobs = 0;
+/* Value of job_slots that means no limit.  */
 
-/* File descriptors for the jobs pipe.  */
+static const int inf_jobs = 0;
 
-char *jobserver_fds = 0;
+/* Authorization for the jobserver.  */
 
-int job_fds[2] = { -1, -1 };
-int job_rfd = -1;
+static char *jobserver_auth = NULL;
 
 /* Handle for the mutex used on Windows to synchronize output of our
    children under -O.  */
 
-char *sync_mutex = 0;
+char *sync_mutex = NULL;
 
 /* Maximum load average at which multiple jobs will be run.
    Negative values mean unlimited, while zero means limit to
@@ -423,7 +448,7 @@ static const struct command_switch switches[] =
     { 'f', filename, &makefiles, 0, 0, 0, 0, 0, "file" },
     { 'I', filename, &include_directories, 1, 1, 0, 0, 0,
       "include-dir" },
-    { 'j', positive_int, &job_slots, 1, 1, 0, &inf_jobs, &default_job_slots,
+    { 'j', positive_int, &arg_job_slots, 1, 1, 0, &inf_jobs, &default_job_slots,
       "jobs" },
 #ifndef NO_FLOAT
     { 'l', floating, &max_load_average, 1, 1, 0, &default_load_average,
@@ -438,7 +463,7 @@ static const struct command_switch switches[] =
 
     /* These are long-style options.  */
     { CHAR_MAX+1, strlist, &db_flags, 1, 1, 0, "basic", 0, "debug" },
-    { CHAR_MAX+2, string, &jobserver_fds, 1, 1, 0, 0, 0, "jobserver-fds" },
+    { CHAR_MAX+2, string, &jobserver_auth, 1, 1, 0, 0, 0, "jobserver-auth" },
     { CHAR_MAX+3, flag, &trace_flag, 1, 1, 0, 0, 0, "trace" },
     { CHAR_MAX+4, flag, &inhibit_print_directory_flag, 1, 1, 0, 0, 0,
       "no-print-directory" },
@@ -466,7 +491,7 @@ static struct option long_option_aliases[] =
 
 /* List of goal targets.  */
 
-static struct dep *goals, *lastgoal;
+static struct goaldep *goals, *lastgoal;
 
 /* List of variables which were defined on the command line
    (or, equivalently, in MAKEFLAGS).  */
@@ -565,7 +590,7 @@ struct output make_sync;
 \f
 /* Mask of signals that are being caught with fatal_error_signal.  */
 
-#ifdef  POSIX
+#ifdef POSIX
 sigset_t fatal_signal_set;
 #else
 # ifdef HAVE_SIGSETMASK
@@ -608,7 +633,7 @@ initialize_global_hash_tables (void)
    Each element is true if we should stop parsing on that character.  */
 
 static void
-initialize_stopchar_map ()
+initialize_stopchar_map (void)
 {
   int i;
 
@@ -626,21 +651,25 @@ initialize_stopchar_map ()
   stopchar_map[(int)'-'] = MAP_USERFUNC;
   stopchar_map[(int)'_'] = MAP_USERFUNC;
 
+  stopchar_map[(int)' '] = MAP_BLANK;
+  stopchar_map[(int)'\t'] = MAP_BLANK;
+
   stopchar_map[(int)'/'] = MAP_DIRSEP;
 #if defined(VMS)
-  stopchar_map[(int)']'] = MAP_DIRSEP;
+  stopchar_map[(int)':'] |= MAP_DIRSEP;
+  stopchar_map[(int)']'] |= MAP_DIRSEP;
+  stopchar_map[(int)'>'] |= MAP_DIRSEP;
 #elif defined(HAVE_DOS_PATHS)
-  stopchar_map[(int)'\\'] = MAP_DIRSEP;
+  stopchar_map[(int)'\\'] |= MAP_DIRSEP;
 #endif
 
   for (i = 1; i <= UCHAR_MAX; ++i)
     {
-      if (isblank(i))
-        stopchar_map[i] = MAP_BLANK;
-      if (isspace(i))
-        stopchar_map[i] |= MAP_SPACE;
-      if (isalnum(i))
-        stopchar_map[i] = MAP_USERFUNC;
+      if (isspace (i) && NONE_SET (stopchar_map[i], MAP_BLANK))
+        /* Don't mark blank characters as newline characters.  */
+        stopchar_map[i] |= MAP_NEWLINE;
+      else if (isalnum (i))
+        stopchar_map[i] |= MAP_USERFUNC;
     }
 }
 
@@ -759,6 +788,9 @@ decode_debug_flags (void)
 static void
 decode_output_sync_flags (void)
 {
+#ifdef NO_OUTPUT_SYNC
+  output_sync = OUTPUT_SYNC_NONE;
+#else
   if (output_sync_option)
     {
       if (streq (output_sync_option, "none"))
@@ -776,6 +808,7 @@ decode_output_sync_flags (void)
 
   if (sync_mutex)
     RECORD_SYNC_MUTEX (sync_mutex);
+#endif
 }
 
 #ifdef WINDOWS32
@@ -1017,6 +1050,14 @@ msdos_return_to_initial_directory (void)
 }
 #endif  /* __MSDOS__ */
 
+static void
+reset_jobserver (void)
+{
+  jobserver_clear ();
+  free (jobserver_auth);
+  jobserver_auth = NULL;
+}
+
 #ifdef _AMIGA
 int
 main (int argc, char **argv)
@@ -1027,10 +1068,11 @@ main (int argc, char **argv, char **envp)
 {
   static char *stdin_nm = 0;
   int makefile_status = MAKE_SUCCESS;
-  struct dep *read_files;
+  struct goaldep *read_files;
   PATH_VAR (current_directory);
   unsigned int restarts = 0;
   unsigned int syncing = 0;
+  int argv_slots;
 #ifdef WINDOWS32
   const char *unix_path = NULL;
   const char *windows32_path = NULL;
@@ -1190,14 +1232,58 @@ main (int argc, char **argv, char **envp)
             }
         }
 #endif
-      if (program == 0)
 #ifdef VMS
-        program = vms_progname(argv[0]);
+      set_program_name (argv[0]);
+      program = program_name;
+      {
+        const char *shell;
+        char pwdbuf[256];
+        char *pwd;
+        shell = getenv ("SHELL");
+        if (shell != NULL)
+          vms_gnv_shell = 1;
+
+        /* Need to know if CRTL set to report UNIX paths.  Use getcwd as
+           it works on all versions of VMS. */
+        pwd = getcwd(pwdbuf, 256);
+        if (pwd[0] == '/')
+          vms_report_unix_paths = 1;
+
+        vms_use_mcr_command = get_vms_env_flag ("GNV$MAKE_USE_MCR", 0);
+
+        vms_always_use_cmd_file = get_vms_env_flag ("GNV$MAKE_USE_CMD_FILE", 0);
+
+        /* Legacy behavior is on VMS is older behavior that needed to be
+           changed to be compatible with standard make behavior.
+           For now only completely disable when running under a Bash shell.
+           TODO: Update VMS built in recipes and macros to not need this
+           behavior, at which time the default may change. */
+        vms_legacy_behavior = get_vms_env_flag ("GNV$MAKE_OLD_VMS",
+                                                !vms_gnv_shell);
+
+        /* VMS was changed to use a comma separator in the past, but that is
+           incompatible with built in functions that expect space separated
+           lists.  Allow this to be selectively turned off. */
+        vms_comma_separator = get_vms_env_flag ("GNV$MAKE_COMMA",
+                                                vms_legacy_behavior);
+
+        /* Some Posix shell syntax options are incompatible with VMS syntax.
+           VMS requires double quotes for strings and escapes quotes
+           differently.  When this option is active, VMS will try
+           to simulate Posix shell simulations instead of using
+           VMS DCL behavior. */
+        vms_unix_simulation = get_vms_env_flag ("GNV$MAKE_SHELL_SIM",
+                                                !vms_legacy_behavior);
+
+      }
+      if (need_vms_symbol () && !vms_use_mcr_command)
+        create_foreign_command (program_name, argv[0]);
 #else
+      if (program == 0)
         program = argv[0];
-#endif
       else
         ++program;
+#endif
     }
 
   /* Set up to access user data (files).  */
@@ -1234,6 +1320,7 @@ main (int argc, char **argv, char **envp)
   /* define_variable_cname (".TARGETS", "", o_default, 0)->special = 1; */
   define_variable_cname (".RECIPEPREFIX", "", o_default, 0)->special = 1;
   define_variable_cname (".SHELLFLAGS", "-c", o_default, 0);
+  define_variable_cname (".LOADED", "", o_default, 0);
 
   /* Set up .FEATURES
      Use a separate variable because define_variable_cname() is a macro and
@@ -1381,6 +1468,13 @@ main (int argc, char **argv, char **envp)
 
   decode_env_switches (STRING_SIZE_TUPLE ("MAKEFLAGS"));
 
+#if 0
+  /* People write things like:
+        MFLAGS="CC=gcc -pipe" "CFLAGS=-g"
+     and we set the -p, -i and -e switches.  Doesn't seem quite right.  */
+  decode_env_switches (STRING_SIZE_TUPLE ("MFLAGS"));
+#endif
+
   /* In output sync mode we need to sync any output generated by reading the
      makefiles, such as in $(info ...) or stderr from $(shell ...) etc.  */
 
@@ -1388,26 +1482,34 @@ main (int argc, char **argv, char **envp)
                                  || output_sync == OUTPUT_SYNC_TARGET);
   OUTPUT_SET (&make_sync);
 
-#if 0
-  /* People write things like:
-        MFLAGS="CC=gcc -pipe" "CFLAGS=-g"
-     and we set the -p, -i and -e switches.  Doesn't seem quite right.  */
-  decode_env_switches (STRING_SIZE_TUPLE ("MFLAGS"));
-#endif
+  /* Remember the job slots set through the environment vs. command line.  */
+  {
+    int env_slots = arg_job_slots;
+    arg_job_slots = INVALID_JOB_SLOTS;
 
-  decode_switches (argc, (const char **)argv, 0);
+    decode_switches (argc, (const char **)argv, 0);
+    argv_slots = arg_job_slots;
 
-    /* Set a variable specifying whether stdout/stdin is hooked to a TTY.  */
+    if (arg_job_slots == INVALID_JOB_SLOTS)
+      arg_job_slots = env_slots;
+  }
+
+  /* Set a variable specifying whether stdout/stdin is hooked to a TTY.  */
 #ifdef HAVE_ISATTY
-    if (isatty (fileno (stdout)))
-      if (! lookup_variable (STRING_SIZE_TUPLE ("MAKE_TERMOUT")))
-        define_variable_cname ("MAKE_TERMOUT", TTYNAME (fileno (stdout)),
+  if (isatty (fileno (stdout)))
+    if (! lookup_variable (STRING_SIZE_TUPLE ("MAKE_TERMOUT")))
+      {
+        const char *tty = TTYNAME (fileno (stdout));
+        define_variable_cname ("MAKE_TERMOUT", tty ? tty : DEFAULT_TTYNAME,
                                o_default, 0)->export = v_export;
-
-    if (isatty (fileno (stderr)))
-      if (! lookup_variable (STRING_SIZE_TUPLE ("MAKE_TERMERR")))
-        define_variable_cname ("MAKE_TERMERR", TTYNAME (fileno (stderr)),
+      }
+  if (isatty (fileno (stderr)))
+    if (! lookup_variable (STRING_SIZE_TUPLE ("MAKE_TERMERR")))
+      {
+        const char *tty = TTYNAME (fileno (stderr));
+        define_variable_cname ("MAKE_TERMERR", tty ? tty : DEFAULT_TTYNAME,
                                o_default, 0)->export = v_export;
+      }
 #endif
 
   /* Reset in case the switches changed our minds.  */
@@ -1507,94 +1609,52 @@ main (int argc, char **argv, char **envp)
   /* We may move, but until we do, here we are.  */
   starting_directory = current_directory;
 
-#ifdef MAKE_JOBSERVER
-  /* If the jobserver-fds option is seen, make sure that -j is reasonable.
-     This can't be usefully set in the makefile, and we want to verify the
-     FDs are valid before any other aspect of make has a chance to start
-     using them for something else.  */
+  /* Set up the job_slots value and the jobserver.  This can't be usefully set
+     in the makefile, and we want to verify the authorization is valid before
+     make has a chance to start using it for something else.  */
 
-  if (jobserver_fds)
+  if (jobserver_auth)
     {
-      /* Make sure the jobserver option has the proper format.  */
-      const char *cp = jobserver_fds;
-
-#ifdef WINDOWS32
-      if (! open_jobserver_semaphore (cp))
-        {
-          DWORD err = GetLastError ();
-          const char *estr = map_windows32_error_to_string (err);
-          fatal (NILF, strlen (cp) + INTSTR_LENGTH + strlen (estr),
-                 _("internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"),
-                 cp, err, estr);
-        }
-      DB (DB_JOBS, (_("Jobserver client (semaphore %s)\n"), cp));
-#else
-      if (sscanf (cp, "%d,%d", &job_fds[0], &job_fds[1]) != 2)
-        OS (fatal, NILF,
-            _("internal error: invalid --jobserver-fds string '%s'"), cp);
-
-      DB (DB_JOBS,
-          (_("Jobserver client (fds %d,%d)\n"), job_fds[0], job_fds[1]));
-#endif
-
-      /* The combination of a pipe + !job_slots means we're using the
-         jobserver.  If !job_slots and we don't have a pipe, we can start
-         infinite jobs.  If we see both a pipe and job_slots >0 that means the
-         user set -j explicitly.  This is broken; in this case obey the user
-         (ignore the jobserver pipe for this make) but print a message.
-         If we've restarted, we already printed this the first time.  */
-
-      if (job_slots > 0)
-        {
-          if (! restarts)
-            O (error, NILF,
-               _("warning: -jN forced in submake: disabling jobserver mode."));
-        }
-#ifndef WINDOWS32
-#ifdef HAVE_FCNTL
-# define FD_OK(_f) ((fcntl ((_f), F_GETFD) != -1) || (errno != EBADF))
-#else
-# define FD_OK(_f) 1
-#endif
-      /* Create a duplicate pipe, that will be closed in the SIGCHLD
-         handler.  If this fails with EBADF, the parent has closed the pipe
-         on us because it didn't think we were a submake.  If so, print a
-         warning then default to -j1.  */
-      else if (!FD_OK (job_fds[0]) || !FD_OK (job_fds[1])
-               || (job_rfd = dup (job_fds[0])) < 0)
+      if (argv_slots == INVALID_JOB_SLOTS)
         {
-          if (errno != EBADF)
-            pfatal_with_name (_("dup jobserver"));
+          if (jobserver_parse_auth (jobserver_auth))
+            {
+              /* Success!  Use the jobserver.  */
+              job_slots = 0;
+              goto job_setup_complete;
+            }
 
-          O (error, NILF,
-             _("warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."));
-          job_slots = 1;
-          job_fds[0] = job_fds[1] = -1;
+          O (error, NILF, _("warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."));
+          arg_job_slots = 1;
         }
-#endif
 
-      if (job_slots > 0)
-        {
-#ifdef WINDOWS32
-          free_jobserver_semaphore ();
-#else
-          if (job_fds[0] >= 0)
-            close (job_fds[0]);
-          if (job_fds[1] >= 0)
-            close (job_fds[1]);
-#endif
-          job_fds[0] = job_fds[1] = -1;
+      /* The user provided a -j setting on the command line: use it.  */
+      else if (!restarts)
+        /* If restarts is >0 we already printed this message.  */
+        O (error, NILF,
+           _("warning: -jN forced in submake: disabling jobserver mode."));
 
-          free (jobserver_fds);
-          jobserver_fds = 0;
-        }
+      /* We failed to use our parent's jobserver.  */
+      reset_jobserver ();
+      job_slots = (unsigned int)arg_job_slots;
     }
-#endif
+  else if (arg_job_slots == INVALID_JOB_SLOTS)
+    /* The default is one job at a time.  */
+    job_slots = 1;
+  else
+    /* Use whatever was provided.  */
+    job_slots = (unsigned int)arg_job_slots;
+
+ job_setup_complete:
 
   /* The extra indirection through $(MAKE_COMMAND) is done
      for hysterical raisins.  */
+
 #ifdef VMS
-  define_variable_cname("MAKE_COMMAND", vms_command(argv[0]), o_default, 0);
+  if (vms_use_mcr_command)
+    define_variable_cname ("MAKE_COMMAND", vms_command (argv[0]), o_default, 0);
+  else
+    define_variable_cname ("MAKE_COMMAND", program, o_default, 0);
 #else
   define_variable_cname ("MAKE_COMMAND", argv[0], o_default, 0);
 #endif
@@ -1646,6 +1706,9 @@ main (int argc, char **argv, char **envp)
          a reference to this hidden variable is written instead. */
       define_variable_cname ("MAKEOVERRIDES", "${-*-command-variables-*-}",
                              o_env, 1);
+#ifdef VMS
+      vms_export_dcl_symbol ("MAKEOVERRIDES", "${-*-command-variables-*-}");
+#endif
     }
 
   /* If there were -C flags, move ourselves about.  */
@@ -1742,7 +1805,7 @@ main (int argc, char **argv, char **envp)
                  _("Makefile from standard input specified twice."));
 
 #ifdef VMS
-# define DEFAULT_TMPDIR     "sys$scratch:"
+# define DEFAULT_TMPDIR     "/sys$scratch/"
 #else
 # ifdef P_tmpdir
 #  define DEFAULT_TMPDIR    P_tmpdir
@@ -1806,7 +1869,7 @@ main (int argc, char **argv, char **envp)
     }
 
 #ifndef __EMX__ /* Don't use a SIGCHLD handler for OS/2 */
-#if defined(MAKE_JOBSERVER) || !defined(HAVE_WAIT_NOHANG)
+#if !defined(HAVE_WAIT_NOHANG) || defined(MAKE_JOBSERVER)
   /* Set up to handle children dying.  This must be done before
      reading in the makefiles so that 'shell' function calls will work.
 
@@ -1814,13 +1877,12 @@ main (int argc, char **argv, char **envp)
      functionality here and rely on the signal handler and counting
      children.
 
-     If we're using the jobs pipe we need a signal handler so that
-     SIGCHLD is not ignored; we need it to interrupt the read(2) of the
-     jobserver pipe in job.c if we're waiting for a token.
+     If we're using the jobs pipe we need a signal handler so that SIGCHLD is
+     not ignored; we need it to interrupt the read(2) of the jobserver pipe if
+     we're waiting for a token.
 
      If none of these are true, we don't need a signal handler at all.  */
   {
-    RETSIGTYPE child_handler (int sig);
 # if defined SIGCHLD
     bsd_signal (SIGCHLD, child_handler);
 # endif
@@ -1828,6 +1890,18 @@ main (int argc, char **argv, char **envp)
     bsd_signal (SIGCLD, child_handler);
 # endif
   }
+
+#ifdef HAVE_PSELECT
+  /* If we have pselect() then we need to block SIGCHLD so it's deferred.  */
+  {
+    sigset_t block;
+    sigemptyset (&block);
+    sigaddset (&block, SIGCHLD);
+    if (sigprocmask (SIG_SETMASK, &block, NULL) < 0)
+      pfatal_with_name ("sigprocmask(SIG_SETMASK, SIGCHLD)");
+  }
+#endif
+
 #endif
 #endif
 
@@ -1900,7 +1974,7 @@ main (int argc, char **argv, char **envp)
     no_default_sh_exe = !find_and_set_default_shell (NULL);
 #endif /* WINDOWS32 */
 
-#if defined (__MSDOS__) || defined (__EMX__)
+#if defined (__MSDOS__) || defined (__EMX__) || defined (VMS)
   /* We need to know what kind of shell we will be using.  */
   {
     extern int _is_unixy_shell (const char *_path);
@@ -1964,7 +2038,7 @@ main (int argc, char **argv, char **envp)
   }
 
 #if defined (__MSDOS__) || defined (__EMX__) || defined (VMS)
-  if (job_slots != 1
+  if (arg_job_slots != 1
 # ifdef __EMX__
       && _osmode != OS2_MODE /* turn off -j if we are in DOS mode */
 # endif
@@ -1973,73 +2047,40 @@ main (int argc, char **argv, char **envp)
       O (error, NILF,
          _("Parallel jobs (-j) are not supported on this platform."));
       O (error, NILF, _("Resetting to single job (-j1) mode."));
-      job_slots = 1;
+      arg_job_slots = job_slots = 1;
     }
 #endif
 
-#ifdef MAKE_JOBSERVER
-  /* If we have >1 slot but no jobserver-fds, then we're a top-level make.
-     Set up the pipe and install the fds option for our children.  */
+  /* If we have >1 slot at this point, then we're a top-level make.
+     Set up the jobserver.
 
-  if (job_slots > 1)
-    {
-#ifdef WINDOWS32
-      /* sub_proc.c cannot wait for more than MAXIMUM_WAIT_OBJECTS objects
-       * and one of them is the job-server semaphore object.  Limit the
-       * number of available job slots to (MAXIMUM_WAIT_OBJECTS - 1). */
-
-      if (job_slots >= MAXIMUM_WAIT_OBJECTS)
-        {
-          job_slots = MAXIMUM_WAIT_OBJECTS - 1;
-          DB (DB_JOBS, (_("Jobserver slots limited to %d\n"), job_slots));
-        }
-
-      if (! create_jobserver_semaphore (job_slots - 1))
-        {
-          DWORD err = GetLastError ();
-          const char *estr = map_windows32_error_to_string (err);
-          ONS (fatal, NILF,
-               _("creating jobserver semaphore: (Error %ld: %s)"), err, estr);
-        }
-#else
-      char c = '+';
+     Every make assumes that it always has one job it can run.  For the
+     submakes it's the token they were given by their parent.  For the top
+     make, we just subtract one from the number the user wants.  */
 
-      if (pipe (job_fds) < 0 || (job_rfd = dup (job_fds[0])) < 0)
-        pfatal_with_name (_("creating jobs pipe"));
-#endif
-
-      /* Every make assumes that it always has one job it can run.  For the
-         submakes it's the token they were given by their parent.  For the
-         top make, we just subtract one from the number the user wants.  We
-         want job_slots to be 0 to indicate we're using the jobserver.  */
-
-      master_job_slots = job_slots;
+  if (job_slots > 1 && jobserver_setup (job_slots - 1))
+    {
+      /* Fill in the jobserver_auth for our children.  */
+      jobserver_auth = jobserver_get_auth ();
 
-#ifdef WINDOWS32
-      /* We're using the jobserver so set job_slots to 0. */
-      job_slots = 0;
-#else
-      while (--job_slots)
+      if (jobserver_auth)
         {
-          int r;
-
-          EINTRLOOP (r, write (job_fds[1], &c, 1));
-          if (r != 1)
-            pfatal_with_name (_("init jobserver pipe"));
+          /* We're using the jobserver so set job_slots to 0.  */
+          master_job_slots = job_slots;
+          job_slots = 0;
         }
-#endif
-
-      /* Fill in the jobserver_fds for our children.  */
+    }
 
-#ifdef WINDOWS32
-      jobserver_fds = xmalloc (MAX_PATH + 1);
-      strcpy (jobserver_fds, get_jobserver_semaphore_name ());
-#else
-      jobserver_fds = xmalloc ((INTSTR_LENGTH * 2) + 2);
-      sprintf (jobserver_fds, "%d,%d", job_fds[0], job_fds[1]);
-#endif
+  /* If we're not using parallel jobs, then we don't need output sync.
+     This is so people can enable output sync in GNUMAKEFLAGS or similar, but
+     not have it take effect unless parallel builds are enabled.  */
+  if (syncing && job_slots == 1)
+    {
+      OUTPUT_UNSET ();
+      output_close (&make_sync);
+      syncing = 0;
+      output_sync = OUTPUT_SYNC_NONE;
     }
-#endif
 
 #ifndef MAKE_SYMLINKS
   if (check_symlink_flag)
@@ -2053,7 +2094,7 @@ main (int argc, char **argv, char **envp)
 
   define_makeflags (1, 0);
 
-  /* Make each 'struct dep' point at the 'struct file' for the file
+  /* Make each 'struct goaldep' point at the 'struct file' for the file
      depended on.  Also do magic for special targets.  */
 
   snap_deps ();
@@ -2124,18 +2165,14 @@ main (int argc, char **argv, char **envp)
       char **aargv = NULL;
       const char **nargv;
       int nargc;
-      int orig_db_level = db_level;
       enum update_status status;
 
-      if (! ISDB (DB_MAKEFILES))
-        db_level = DB_NONE;
-
       DB (DB_BASIC, (_("Updating makefiles....\n")));
 
       /* Remove any makefiles we don't want to try to update.
          Also record the current modtimes so we can compare them later.  */
       {
-        register struct dep *d, *last;
+        register struct goaldep *d, *last;
         last = 0;
         d = read_files;
         while (d != 0)
@@ -2164,13 +2201,14 @@ main (int argc, char **argv, char **envp)
                         last->next = d->next;
 
                       /* Free the storage.  */
-                      free_dep (d);
+                      free_goaldep (d);
 
                       d = last == 0 ? read_files : last->next;
 
                       break;
                     }
                 }
+
             if (f == NULL || !f->double_colon)
               {
                 makefile_mtimes = xrealloc (makefile_mtimes,
@@ -2186,18 +2224,26 @@ main (int argc, char **argv, char **envp)
       /* Set up 'MAKEFLAGS' specially while remaking makefiles.  */
       define_makeflags (1, 1);
 
-      rebuilding_makefiles = 1;
-      status = update_goal_chain (read_files);
-      rebuilding_makefiles = 0;
+      {
+        int orig_db_level = db_level;
+
+        if (! ISDB (DB_MAKEFILES))
+          db_level = DB_NONE;
+
+        rebuilding_makefiles = 1;
+        status = update_goal_chain (read_files);
+        rebuilding_makefiles = 0;
+
+        db_level = orig_db_level;
+      }
 
       switch (status)
         {
         case us_question:
           /* The only way this can happen is if the user specified -q and asked
-           * for one of the makefiles to be remade as a target on the command
-           * line.  Since we're not actually updating anything with -q we can
-           * treat this as "did nothing".
-           */
+             for one of the makefiles to be remade as a target on the command
+             line.  Since we're not actually updating anything with -q we can
+             treat this as "did nothing".  */
 
         case us_none:
           /* Did nothing.  */
@@ -2212,7 +2258,7 @@ main (int argc, char **argv, char **envp)
                in updating or could not be found at all.  */
             int any_failed = 0;
             unsigned int i;
-            struct dep *d;
+            struct goaldep *d;
 
             for (i = 0, d = read_files; d != 0; ++i, d = d->next)
               {
@@ -2229,7 +2275,7 @@ main (int argc, char **argv, char **envp)
                         any_remade |= (file_mtime_no_search (d->file)
                                        != makefile_mtimes[i]);
                       }
-                    else if (! (d->changed & RM_DONTCARE))
+                    else if (! (d->flags & RM_DONTCARE))
                       {
                         FILE_TIMESTAMP mtime;
                         /* The update failed and this makefile was not
@@ -2244,13 +2290,13 @@ main (int argc, char **argv, char **envp)
                   }
                 else
                   /* This makefile was not found at all.  */
-                  if (! (d->changed & RM_DONTCARE))
+                  if (! (d->flags & RM_DONTCARE))
                     {
                       const char *dnm = dep_name (d);
                       size_t l = strlen (dnm);
 
                       /* This is a makefile we care about.  See how much.  */
-                      if (d->changed & RM_INCLUDED)
+                      if (d->flags & RM_INCLUDED)
                         /* An included makefile.  We don't need to die, but we
                            do want to complain.  */
                         error (NILF, l,
@@ -2332,11 +2378,6 @@ main (int argc, char **argv, char **envp)
 
           ++restarts;
 
-          /* If we're re-exec'ing the first make, put back the number of
-             job slots so define_makefiles() will get it right.  */
-          if (master_job_slots)
-            job_slots = master_job_slots;
-
           if (ISDB (DB_BASIC))
             {
               const char **p;
@@ -2344,6 +2385,7 @@ main (int argc, char **argv, char **envp)
               for (p = nargv; *p != 0; ++p)
                 printf (" %s", *p);
               putchar ('\n');
+              fflush (stdout);
             }
 
 #ifndef _AMIGA
@@ -2355,6 +2397,9 @@ main (int argc, char **argv, char **envp)
                   {
                     *p = alloca (40);
                     sprintf (*p, "%s=%u", MAKELEVEL_NAME, makelevel);
+#ifdef VMS
+                    vms_putenv_symbol (*p);
+#endif
                   }
                 else if (strneq (*p, "MAKE_RESTARTS=", CSTRLEN ("MAKE_RESTARTS=")))
                   {
@@ -2390,10 +2435,6 @@ main (int argc, char **argv, char **envp)
           fflush (stdout);
           fflush (stderr);
 
-          /* Close the dup'd jobserver pipe if we opened one.  */
-          if (job_rfd >= 0)
-            close (job_rfd);
-
 #ifdef _AMIGA
           exec_command (nargv);
           exit (0);
@@ -2407,8 +2448,7 @@ main (int argc, char **argv, char **envp)
                termination. */
             int pid;
             int r;
-            pid = child_execute_job (FD_STDIN, FD_STDOUT, FD_STDERR,
-                                     nargv, environ);
+            pid = child_execute_job (NULL, 1, nargv, environ);
 
             /* is this loop really necessary? */
             do {
@@ -2424,8 +2464,6 @@ main (int argc, char **argv, char **envp)
           break;
         }
 
-      db_level = orig_db_level;
-
       /* Free the makefile mtimes.  */
       free (makefile_mtimes);
     }
@@ -2494,7 +2532,7 @@ main (int argc, char **argv, char **envp)
 
           if (f)
             {
-              goals = alloc_dep ();
+              goals = alloc_goaldep ();
               goals->file = f;
             }
         }
@@ -2529,8 +2567,7 @@ main (int argc, char **argv, char **envp)
         makefile_status = MAKE_TROUBLE;
         break;
       case us_failed:
-        /* Updating failed.  POSIX.2 specifies exit status >1 for this;
-           but in VMS, there is only success and failure.  */
+        /* Updating failed.  POSIX.2 specifies exit status >1 for this; */
         makefile_status = MAKE_FAILURE;
         break;
     }
@@ -2626,6 +2663,31 @@ handle_non_switch_argument (const char *arg, int env)
     /* Ignore plain '-' for compatibility.  */
     return;
 
+#ifdef VMS
+  {
+    /* VMS DCL quoting can result in foo="bar baz" showing up here.
+       Need to remove the double quotes from the value. */
+    char * eq_ptr;
+    char * new_arg;
+    eq_ptr = strchr (arg, '=');
+    if ((eq_ptr != NULL) && (eq_ptr[1] == '"'))
+      {
+         int len;
+         int seg1;
+         int seg2;
+         len = strlen(arg);
+         new_arg = alloca(len);
+         seg1 = eq_ptr - arg + 1;
+         strncpy(new_arg, arg, (seg1));
+         seg2 = len - seg1 - 1;
+         strncpy(&new_arg[seg1], &eq_ptr[2], seg2);
+         new_arg[seg1 + seg2] = 0;
+         if (new_arg[seg1 + seg2 - 1] == '"')
+           new_arg[seg1 + seg2 - 1] = 0;
+         arg = new_arg;
+      }
+  }
+#endif
   v = try_variable_definition (0, arg, o_command, 0);
   if (v != 0)
     {
@@ -2656,12 +2718,12 @@ handle_non_switch_argument (const char *arg, int env)
 
       if (goals == 0)
         {
-          goals = alloc_dep ();
+          goals = alloc_goaldep ();
           lastgoal = goals;
         }
       else
         {
-          lastgoal->next = alloc_dep ();
+          lastgoal->next = alloc_goaldep ();
           lastgoal = lastgoal->next;
         }
 
@@ -2940,7 +3002,7 @@ decode_env_switches (const char *envar, unsigned int len)
   value = variable_expand (varref);
 
   /* Skip whitespace, and check for an empty value.  */
-  value = next_token (value);
+  NEXT_TOKEN (value);
   len = strlen (value);
   if (len == 0)
     return;
@@ -2963,14 +3025,14 @@ decode_env_switches (const char *envar, unsigned int len)
     {
       if (*value == '\\' && value[1] != '\0')
         ++value;                /* Skip the backslash.  */
-      else if (isblank ((unsigned char)*value))
+      else if (ISBLANK (*value))
         {
           /* End of the word.  */
           *p++ = '\0';
           argv[++argc] = p;
           do
             ++value;
-          while (isblank ((unsigned char)*value));
+          while (ISBLANK (*value));
           continue;
         }
       *p++ = *value++;
@@ -3001,7 +3063,7 @@ quote_for_env (char *out, const char *in)
     {
       if (*in == '$')
         *out++ = '$';
-      else if (isblank ((unsigned char)*in) || *in == '\\')
+      else if (ISBLANK (*in) || *in == '\\')
         *out++ = '\\';
       *out++ = *in++;
     }
@@ -3068,7 +3130,7 @@ define_makeflags (int all, int makefile)
 
         case flag:
         case flag_off:
-          if (!*(int *) cs->value_ptr == (cs->type == flag_off)
+          if ((!*(int *) cs->value_ptr) == (cs->type == flag_off)
               && (cs->default_value == 0
                   || *(int *) cs->value_ptr != *(int *) cs->default_value))
             ADD_FLAG (0, 0);
@@ -3276,7 +3338,7 @@ print_version (void)
      year, and none of the rest of it should be translated (including the
      word "Copyright"), so it hardly seems worth it.  */
 
-  printf ("%sCopyright (C) 1988-2014 Free Software Foundation, Inc.\n",
+  printf ("%sCopyright (C) 1988-2016 Free Software Foundation, Inc.\n",
           precede);
 
   printf (_("%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n\
@@ -3294,7 +3356,7 @@ print_version (void)
 /* Print a bunch of information about this and that.  */
 
 static void
-print_data_base ()
+print_data_base (void)
 {
   time_t when = time ((time_t *) 0);
 
@@ -3321,13 +3383,7 @@ clean_jobserver (int status)
      have written all our tokens so do that now.  If tokens are left
      after any other error code, that's bad.  */
 
-#ifdef WINDOWS32
-  if (has_jobserver_semaphore () && jobserver_tokens)
-#else
-  char token = '+';
-
-  if (job_fds[0] != -1 && jobserver_tokens)
-#endif
+  if (jobserver_enabled() && jobserver_tokens)
     {
       if (status != 2)
         ON (error, NILF,
@@ -3336,18 +3392,7 @@ clean_jobserver (int status)
       else
         /* Don't write back the "free" token */
         while (--jobserver_tokens)
-          {
-#ifdef WINDOWS32
-            if (! release_jobserver_semaphore ())
-              perror_with_name ("release_jobserver_semaphore", "");
-#else
-            int r;
-
-            EINTRLOOP (r, write (job_fds[1], &token, 1));
-            if (r != 1)
-              perror_with_name ("write", "");
-#endif
-          }
+          jobserver_release (0);
     }
 
 
@@ -3356,36 +3401,14 @@ clean_jobserver (int status)
   if (master_job_slots)
     {
       /* We didn't write one for ourself, so start at 1.  */
-      unsigned int tcnt = 1;
+      unsigned int tokens = 1 + jobserver_acquire_all ();
 
-#ifdef WINDOWS32
-      while (acquire_jobserver_semaphore ())
-          ++tcnt;
-#else
-      /* Close the write side, so the read() won't hang.  */
-      close (job_fds[1]);
-
-      while (read (job_fds[0], &token, 1) == 1)
-        ++tcnt;
-#endif
-
-      if (tcnt != master_job_slots)
+      if (tokens != master_job_slots)
         ONN (error, NILF,
              "INTERNAL: Exiting with %u jobserver tokens available; should be %u!",
-             tcnt, master_job_slots);
-
-#ifdef WINDOWS32
-      free_jobserver_semaphore ();
-#else
-      close (job_fds[0]);
-#endif
+             tokens, master_job_slots);
 
-      /* Clean out jobserver_fds so we don't pass this information to any
-         sub-makes.  Also reset job_slots since it will be put on the command
-         line, not in MAKEFLAGS.  */
-      job_slots = default_job_slots;
-      free (jobserver_fds);
-      jobserver_fds = 0;
+      reset_jobserver ();
     }
 }
 \f
diff --git a/make.1 b/make.1
index ed04db9..d4bd284 100644 (file)
--- a/make.1
+++ b/make.1
@@ -1,4 +1,4 @@
-.TH MAKE 1 "03 March 2012" "GNU" "User Commands"
+.TH MAKE 1 "28 February 2016" "GNU" "User Commands"
 .SH NAME
 make \- GNU make utility to maintain groups of programs
 .SH SYNOPSIS
@@ -363,7 +363,7 @@ This manual page contributed by Dennis Morse of Stanford University.
 Further updates contributed by Mike Frysinger.  It has been reworked by Roland
 McGrath.  Maintained by Paul Smith.
 .SH "COPYRIGHT"
-Copyright \(co 1992-1993, 1996-2014 Free Software Foundation, Inc.
+Copyright \(co 1992-1993, 1996-2016 Free Software Foundation, Inc.
 This file is part of
 .IR "GNU make" .
 .LP
index 01b1f0d..bcc2e8b 100644 (file)
                                        RelativePath=".\w32\pathstuff.c">\r
                                </File>\r
                                <File\r
+                                       RelativePath=".\w32\w32os.c">\r
+                               </File>\r
+                               <File\r
                                        RelativePath=".\w32\subproc\sub_proc.c">\r
                                </File>\r
                                <File\r
index fe37c05..f579695 100644 (file)
@@ -74,8 +74,9 @@ $ endif
 $ filelist = "alloca ar arscan commands default dir expand file function " + -
              "guile hash implicit job load main misc read remake " + -
              "remote-stub rule output signame variable version " + -
-             "vmsfunctions vmsify vpath " + -
-            "[.glob]glob [.glob]fnmatch getopt1 getopt strcache"
+             "vmsfunctions vmsify vpath vms_progname vms_exit " + -
+            "vms_export_symbol [.glob]glob [.glob]fnmatch getopt1 " + -
+             "getopt strcache"
 $!
 $ copy config.h-vms config.h
 $ n=0
@@ -131,6 +132,7 @@ $!-----------------------------------------------------------------------------
 $!
 $ compileit : subroutine
 $ ploc = f$locate("]",p1)
+$! filnam = p1
 $ if ploc .lt. f$length(p1)
 $ then
 $   objdir = f$extract(0, ploc+1, p1)
@@ -139,14 +141,15 @@ $ else
 $   objdir := []
 $   write optf objdir+p1
 $ endif
-$ cc'ccopt'/include=([],[.glob])/obj='objdir' -
-  /define=("allocated_variable_expand_for_file=alloc_var_expand_for_file","unlink=remove","HAVE_CONFIG_H","VMS") -
+$ cc'ccopt'/nested=none/include=([],[.glob])/obj='objdir' -
+  /define=("allocated_variable_expand_for_file=alloc_var_expand_for_file",-
+  "unlink=remove","HAVE_CONFIG_H","VMS") -
   'p1'
 $ exit
 $ endsubroutine : compileit
 $!
 $!-----------------------------------------------------------------------------
-$!Copyright (C) 1996-2014 Free Software Foundation, Inc.
+$!Copyright (C) 1996-2016 Free Software Foundation, Inc.
 $!This file is part of GNU Make.
 $!
 $!GNU Make is free software; you can redistribute it and/or modify it under
index ad5ded7..37702d5 100644 (file)
@@ -1,6 +1,6 @@
 # -*-Makefile-*- to build GNU make on VMS
 #
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
@@ -32,9 +32,12 @@ CP = copy
 #
 
 ifeq ($(CC),cc)
-CFLAGS = $(defines) /include=([],[.glob])/prefix=(all,except=(glob,globfree))/standard=relaxed/warn=(disable=questcompare)
+cinclude = /nested=none/include=([],[.glob])
+cprefix = /prefix=(all,except=(glob,globfree))
+cwarn = /standard=relaxed/warn=(disable=questcompare)
+CFLAGS = $(defines) $(cinclude)$(cprefix)$(cwarn)
 else
-CFLAGS = $(defines) /include=([],[.glob])
+CFLAGS = $(defines) $(cinclude)
 endif
 #LDFLAGS = /deb
 LDFLAGS =
@@ -93,13 +96,14 @@ guile = ,guile.obj
 objs = commands.obj,job.obj,output.obj,dir.obj,file.obj,misc.obj,hash.obj,\
        load.obj,main.obj,read.obj,remake.obj,rule.obj,implicit.obj,\
        default.obj,variable.obj,expand.obj,function.obj,strcache.obj,\
-       vpath.obj,version.obj$(guile)\
-       $(ARCHIVES)$(ALLOCA)$(extras)$(getopt)$(glob)
+       vpath.obj,version.obj,vms_progname.obj,vms_exit.obj,\
+       vms_export_symbol.obj$(guile)$(ARCHIVES)$(extras)$(getopt)$(glob)
 
 srcs = commands.c job.c output.c dir.c file.c misc.c guile.c hash.c \
        load.c main.c read.c remake.c rule.c implicit.c \
        default.c variable.c expand.c function.c strcache.c \
-       vpath.c version.c vmsfunctions.c vmsify.c $(ARCHIVES_SRC) $(ALLOCASRC) \
+       vpath.c version.c vmsfunctions.c vmsify.c vms_progname.c vms_exit.c \
+       vms_export_symbol.c $(ARCHIVES_SRC) $(ALLOCASRC) \
        commands.h dep.h filedef.h job.h output.h makeint.h rule.h variable.h
 
 
@@ -168,6 +172,9 @@ vmsfunctions.obj: vmsfunctions.c makeint.h config.h gnumake.h gettext.h \
 vmsify.obj: vmsify.c
 vpath.obj: vpath.c makeint.h config.h gnumake.h gettext.h filedef.h hash.h \
      variable.h
+vms_progname.obj: vms_progname.c
+vms_exit.obj: vms_exit.c
+vms_export_symbol.obj: vms_export_symbol.c
 
 config.h: config.h-vms
        $(CP) $< $@
index fdcae75..8f718eb 100644 (file)
--- a/makeint.h
+++ b/makeint.h
@@ -1,5 +1,5 @@
 /* Miscellaneous global declarations and portability cruft for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -95,8 +95,13 @@ char *alloca ();
 extern int errno;
 #endif
 
-#ifndef isblank
-# define isblank(c)     ((c) == ' ' || (c) == '\t')
+#ifdef __VMS
+/* In strict ANSI mode, VMS compilers should not be defining the
+   VMS macro.  Define it here instead of a bulk edit for the correct code.
+ */
+# ifndef VMS
+#  define VMS
+# endif
 #endif
 
 #ifdef  HAVE_UNISTD_H
@@ -129,6 +134,10 @@ extern int errno;
 # define SA_RESTART 0
 #endif
 
+#ifdef HAVE_VFORK_H
+# include <vfork.h>
+#endif
+
 #ifdef  HAVE_LIMITS_H
 # include <limits.h>
 #endif
@@ -201,6 +210,13 @@ unsigned int get_path_max (void);
 # include <perror.h>
 /* Needed to use alloca on VMS.  */
 # include <builtins.h>
+
+extern int vms_use_mcr_command;
+extern int vms_always_use_cmd_file;
+extern int vms_gnv_shell;
+extern int vms_comma_separator;
+extern int vms_legacy_behavior;
+extern int vms_unix_simulation;
 #endif
 
 #ifndef __attribute__
@@ -325,21 +341,6 @@ char *strsignal (int signum);
 #define N_(msgid)           gettext_noop (msgid)
 #define S_(msg1,msg2,num)   ngettext (msg1,msg2,num)
 
-/* Handle other OSs.
-   To overcome an issue parsing paths in a DOS/Windows environment when
-   built in a unix based environment, override the PATH_SEPARATOR_CHAR
-   definition unless being built for Cygwin. */
-#if defined(HAVE_DOS_PATHS) && !defined(__CYGWIN__)
-# undef PATH_SEPARATOR_CHAR
-# define PATH_SEPARATOR_CHAR ';'
-#elif !defined(PATH_SEPARATOR_CHAR)
-# if defined (VMS)
-#  define PATH_SEPARATOR_CHAR ','
-# else
-#  define PATH_SEPARATOR_CHAR ':'
-# endif
-#endif
-
 /* This is needed for getcwd() and chdir(), on some W32 systems.  */
 #if defined(HAVE_DIRECT_H)
 # include <direct.h>
@@ -375,7 +376,7 @@ extern int unixy_shell;
 # endif
 
 /* Include only the minimal stuff from windows.h.   */
-#define WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
 #endif  /* WINDOWS32 */
 
 #define ANY_SET(_v,_m)  (((_v)&(_m)) != 0)
@@ -383,7 +384,7 @@ extern int unixy_shell;
 
 #define MAP_NUL         0x0001
 #define MAP_BLANK       0x0002
-#define MAP_SPACE       0x0004
+#define MAP_NEWLINE     0x0004
 #define MAP_COMMENT     0x0008
 #define MAP_SEMI        0x0010
 #define MAP_EQUALS      0x0020
@@ -406,7 +407,40 @@ extern int unixy_shell;
 # define MAP_VMSCOMMA   0x0000
 #endif
 
-#define STOP_SET(_v,_m) ANY_SET (stopchar_map[(unsigned char)(_v)],(_m))
+#define MAP_SPACE       (MAP_BLANK|MAP_NEWLINE)
+
+/* Handle other OSs.
+   To overcome an issue parsing paths in a DOS/Windows environment when
+   built in a unix based environment, override the PATH_SEPARATOR_CHAR
+   definition unless being built for Cygwin. */
+#if defined(HAVE_DOS_PATHS) && !defined(__CYGWIN__)
+# undef PATH_SEPARATOR_CHAR
+# define PATH_SEPARATOR_CHAR ';'
+# define MAP_PATHSEP    MAP_SEMI
+#elif !defined(PATH_SEPARATOR_CHAR)
+# if defined (VMS)
+#  define PATH_SEPARATOR_CHAR (vms_comma_separator ? ',' : ':')
+#  define MAP_PATHSEP    (vms_comma_separator ? MAP_COMMA : MAP_SEMI)
+# else
+#  define PATH_SEPARATOR_CHAR ':'
+#  define MAP_PATHSEP    MAP_COLON
+# endif
+#elif PATH_SEPARATOR_CHAR == ':'
+# define MAP_PATHSEP     MAP_COLON
+#elif PATH_SEPARATOR_CHAR == ';'
+# define MAP_PATHSEP     MAP_SEMI
+#elif PATH_SEPARATOR_CHAR == ','
+# define MAP_PATHSEP     MAP_COMMA
+#else
+# error "Unknown PATH_SEPARATOR_CHAR"
+#endif
+
+#define STOP_SET(_v,_m) ANY_SET(stopchar_map[(unsigned char)(_v)],(_m))
+
+#define ISBLANK(c)      STOP_SET((c),MAP_BLANK)
+#define ISSPACE(c)      STOP_SET((c),MAP_SPACE)
+#define NEXT_TOKEN(s)   while (ISSPACE (*(s))) ++(s)
+#define END_OF_TOKEN(s) while (! STOP_SET (*(s), MAP_SPACE|MAP_NUL)) ++(s)
 
 #if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
 # define SET_STACK_SIZE
@@ -416,7 +450,9 @@ extern int unixy_shell;
 extern struct rlimit stack_limit;
 #endif
 
-#define NILF ((gmk_floc *)0)
+#include <glob.h>
+
+#define NILF ((floc *)0)
 
 #define CSTRLEN(_s)           (sizeof (_s)-1)
 #define STRING_SIZE_TUPLE(_s) (_s), CSTRLEN(_s)
@@ -424,20 +460,30 @@ extern struct rlimit stack_limit;
 /* The number of bytes needed to represent the largest integer as a string.  */
 #define INTSTR_LENGTH         CSTRLEN ("18446744073709551616")
 
+#define DEFAULT_TTYNAME "true"
 #ifdef HAVE_TTYNAME
 # define TTYNAME(_f) ttyname (_f)
 #else
-# define TTYNAME(_f) "true"
+# define TTYNAME(_f) DEFAULT_TTYNAME
 #endif
 
 \f
+
+/* Specify the location of elements read from makefiles.  */
+typedef struct
+  {
+    const char *filenm;
+    unsigned long lineno;
+    unsigned long offset;
+  } floc;
+
 const char *concat (unsigned int, ...);
 void message (int prefix, size_t length, const char *fmt, ...)
               __attribute__ ((__format__ (__printf__, 3, 4)));
-void error (const gmk_floc *flocp, size_t length, const char *fmt, ...)
+void error (const floc *flocp, size_t length, const char *fmt, ...)
             __attribute__ ((__format__ (__printf__, 3, 4)));
-void fatal (const gmk_floc *flocp, size_t length, const char *fmt, ...)
-                   __attribute__ ((noreturn, __format__ (__printf__, 3, 4)));
+void fatal (const floc *flocp, size_t length, const char *fmt, ...)
+            __attribute__ ((noreturn, __format__ (__printf__, 3, 4)));
 
 #define O(_t,_a,_f)           _t((_a), 0, (_f))
 #define OS(_t,_a,_f,_s)       _t((_a), strlen (_s), (_f), (_s))
@@ -483,7 +529,8 @@ time_t ar_member_date (const char *);
 typedef long int (*ar_member_func_t) (int desc, const char *mem, int truncated,
                                       long int hdrpos, long int datapos,
                                       long int size, long int date, int uid,
-                                      int gid, int mode, const void *arg);
+                                      int gid, unsigned int mode,
+                                      const void *arg);
 
 long int ar_scan (const char *archive, ar_member_func_t function, const void *arg);
 int ar_name_equal (const char *name, const char *mem, int truncated);
@@ -497,6 +544,8 @@ int file_exists_p (const char *);
 int file_impossible_p (const char *);
 void file_impossible (const char *);
 const char *dir_name (const char *);
+void print_dir_data_base (void);
+void dir_setup_glob (glob_t *);
 void hash_init_directories (void);
 
 void define_default_variables (void);
@@ -519,20 +568,21 @@ void child_access (void);
 
 char *strip_whitespace (const char **begpp, const char **endpp);
 
+void show_goal_error (void);
+
 /* String caching  */
 void strcache_init (void);
 void strcache_print_stats (const char *prefix);
 int strcache_iscached (const char *str);
 const char *strcache_add (const char *str);
 const char *strcache_add_len (const char *str, unsigned int len);
-int strcache_setbufsize (unsigned int size);
 
 /* Guile support  */
-int guile_gmake_setup (const gmk_floc *flocp);
+int guile_gmake_setup (const floc *flocp);
 
 /* Loadable object support.  Sets to the strcached name of the loaded file.  */
-typedef int (*load_func_t)(const gmk_floc *flocp);
-int load_file (const gmk_floc *flocp, const char **filename, int noerror);
+typedef int (*load_func_t)(const floc *flocp);
+int load_file (const floc *flocp, const char **filename, int noerror);
 void unload_file (const char *name);
 
 /* We omit these declarations on non-POSIX systems which define _POSIX_VERSION,
@@ -545,16 +595,16 @@ long int atol ();
 long int lseek ();
 # endif
 
-#endif  /* Not GNU C library or POSIX.  */
-
-#ifdef  HAVE_GETCWD
-# if !defined(VMS) && !defined(__DECC)
+# ifdef  HAVE_GETCWD
+#  if !defined(VMS) && !defined(__DECC)
 char *getcwd ();
-# endif
-#else
+#  endif
+# else
 char *getwd ();
-# define getcwd(buf, len)       getwd (buf)
-#endif
+#  define getcwd(buf, len)       getwd (buf)
+# endif
+
+#endif  /* Not GNU C library or POSIX.  */
 
 #if !HAVE_STRCASECMP
 # if HAVE_STRICMP
@@ -583,11 +633,12 @@ int strncasecmp (const char *s1, const char *s2, int n);
 #define OUTPUT_SYNC_TARGET  2
 #define OUTPUT_SYNC_RECURSE 3
 
-extern const gmk_floc *reading_file;
-extern const gmk_floc **expanding_var;
-
+/* Non-GNU systems may not declare this in unistd.h.  */
 extern char **environ;
 
+extern const floc *reading_file;
+extern const floc **expanding_var;
+
 extern unsigned short stopchar_map[];
 
 extern int just_print_flag, silent_flag, ignore_errors_flag, keep_going_flag;
@@ -598,6 +649,8 @@ extern int warn_undefined_variables_flag, trace_flag, posix_pedantic;
 extern int not_parallel, second_expansion, clock_skew_detected;
 extern int rebuilding_makefiles, one_shell, output_sync, verify_flag;
 
+extern const char *default_shell;
+
 /* can we run commands via 'sh -c xxx' or must we use batch files? */
 extern int batch_mode_shell;
 
@@ -607,8 +660,6 @@ extern int batch_mode_shell;
 extern char cmd_prefix;
 
 extern unsigned int job_slots;
-extern int job_fds[2];
-extern int job_rfd;
 #ifndef NO_FLOAT
 extern double max_load_average;
 #else
@@ -622,10 +673,46 @@ extern const char *program;
 #endif
 
 #ifdef VMS
-const char *vms_command(const char *argv0);
-const char *vms_progname(const char *argv0);
+const char *vms_command (const char *argv0);
+const char *vms_progname (const char *argv0);
+
+void vms_exit (int);
+# define _exit(foo) vms_exit(foo)
+# define exit(foo) vms_exit(foo)
+
+extern char *program_name;
+
+void
+set_program_name (const char *arv0);
+
+int
+need_vms_symbol (void);
+
+int
+create_foreign_command (const char *command, const char *image);
+
+int
+vms_export_dcl_symbol (const char *name, const char *value);
+
+int
+vms_putenv_symbol (const char *string);
+
+void
+vms_restore_symbol (const char *string);
+
 #endif
 
+void remote_setup (void);
+void remote_cleanup (void);
+int start_remote_job_p (int);
+int start_remote_job (char **, char **, int, int *, int *, int *);
+int remote_status (int *, int *, int *, int);
+void block_remote_children (void);
+void unblock_remote_children (void);
+int remote_kill (int id, int sig);
+void print_variable_data_base (void);
+void print_vpath_data_base (void);
+
 extern char *starting_directory;
 extern unsigned int makelevel;
 extern char *version_string, *remote_description, *make_host;
@@ -643,18 +730,9 @@ extern int handling_fatal_signal;
 #endif
 
 
-#ifdef VMS
-/* These are the VMS __posix_exit compliant exit codes, constructed out of
-   STS$M_INHIB_MSG, C facility code, a POSIX condition code mask, MAKE_NNN<<3 and
-   the coresponding VMS severity, here STS$K_SUCCESS and STS$K_ERROR. */
-#  define MAKE_SUCCESS 0x1035a001
-#  define MAKE_TROUBLE 0x1035a00a
-#  define MAKE_FAILURE 0x1035a012
-#else
-#  define MAKE_SUCCESS 0
-#  define MAKE_TROUBLE 1
-#  define MAKE_FAILURE 2
-#endif
+#define MAKE_SUCCESS 0
+#define MAKE_TROUBLE 1
+#define MAKE_FAILURE 2
 
 /* Set up heap debugging library dmalloc.  */
 
diff --git a/misc.c b/misc.c
index 00a3210..e7ab809 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -1,5 +1,5 @@
 /* Miscellaneous generic support functions for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -91,12 +91,13 @@ collapse_continuations (char *line)
         {
           /* Backslash/newline handling:
              In traditional GNU make all trailing whitespace, consecutive
-             backslash/newlines, and any leading whitespace on the next line
-             is reduced to a single space.
+             backslash/newlines, and any leading non-newline whitespace on the
+             next line is reduced to a single space.
              In POSIX, each backslash/newline and is replaced by a space.  */
-          in = next_token (in);
+          while (ISBLANK (*in))
+            ++in;
           if (! posix_pedantic)
-            while (out > line && isblank ((unsigned char)out[-1]))
+            while (out > line && ISBLANK (out[-1]))
               --out;
           *out++ = ' ';
         }
@@ -314,8 +315,7 @@ lindex (const char *s, const char *limit, int c)
 char *
 end_of_token (const char *s)
 {
-  while (! STOP_SET (*s, MAP_BLANK|MAP_NUL))
-    ++s;
+  END_OF_TOKEN (s);
   return (char *)s;
 }
 
@@ -324,8 +324,7 @@ end_of_token (const char *s)
 char *
 next_token (const char *s)
 {
-  while (isblank ((unsigned char)*s))
-    ++s;
+  NEXT_TOKEN (s);
   return (char *)s;
 }
 
@@ -377,19 +376,6 @@ copy_dep_chain (const struct dep *d)
   return firstnew;
 }
 
-/* Free a chain of 'struct dep'.  */
-
-void
-free_dep_chain (struct dep *d)
-{
-  while (d != 0)
-    {
-      struct dep *df = d;
-      d = d->next;
-      free_dep (df);
-    }
-}
-
 /* Free a chain of struct nameseq.
    For struct dep chains use free_dep_chain.  */
 
@@ -400,7 +386,7 @@ free_ns_chain (struct nameseq *ns)
     {
       struct nameseq *t = ns;
       ns = ns->next;
-      free (t);
+      free_ns (t);
     }
 }
 \f
diff --git a/os.h b/os.h
new file mode 100644 (file)
index 0000000..c1a19e1
--- /dev/null
+++ b/os.h
@@ -0,0 +1,84 @@
+/* Declarations for operating system interfaces for GNU Make.
+Copyright (C) 2016 Free Software Foundation, Inc.
+This file is part of GNU Make.
+
+GNU Make is free software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 3 of the License, or (at your option) any later
+version.
+
+GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+
+/* This section provides OS-specific functions to support the jobserver.  */
+
+#ifdef MAKE_JOBSERVER
+
+/* Returns 1 if the jobserver is enabled, else 0.  */
+unsigned int jobserver_enabled (void);
+
+/* Called in the master instance to set up the jobserver initially.  */
+unsigned int jobserver_setup (int job_slots);
+
+/* Called in a child instance to connect to the jobserver.  */
+unsigned int jobserver_parse_auth (const char* auth);
+
+/* Returns an allocated buffer used to pass to child instances.  */
+char *jobserver_get_auth (void);
+
+/* Clear this instance's jobserver configuration.  */
+void jobserver_clear (void);
+
+/* Recover all the jobserver tokens and return the number we got.  */
+unsigned int jobserver_acquire_all (void);
+
+/* Release a jobserver token.  If it fails and is_fatal is 1, fatal.  */
+void jobserver_release (int is_fatal);
+
+/* Notify the jobserver that a child exited.  */
+void jobserver_signal (void);
+
+/* Get ready to start a non-recursive child.  */
+void jobserver_pre_child (int);
+
+/* Complete starting a non-recursive child.  */
+void jobserver_post_child (int);
+
+/* Set up to acquire a new token.  */
+void jobserver_pre_acquire (void);
+
+/* Wait until we can acquire a jobserver token.
+   TIMEOUT is 1 if we have other jobs waiting for the load to go down;
+   in this case we won't wait forever, so we can check the load.
+   Returns 1 if we got a token, or 0 if we stopped waiting due to a child
+   exiting or a timeout.    */
+unsigned int jobserver_acquire (int timeout);
+
+#else
+
+#define jobserver_enabled()         (0)
+#define jobserver_setup(_slots)     (0)
+#define jobserver_parse_auth(_auth) (0)
+#define jobserver_get_auth()        (NULL)
+#define jobserver_clear()           (void)(0)
+#define jobserver_release(_fatal)   (void)(0)
+#define jobserver_acquire_all()     (0)
+#define jobserver_signal()          (void)(0)
+#define jobserver_pre_child(_r)     (void)(0)
+#define jobserver_post_child(_r)    (void)(0)
+#define jobserver_pre_acquire()     (void)(0)
+#define jobserver_acquire(_tmout)   (0)
+
+#endif
+
+/* Create a "bad" file descriptor for stdin when parallel jobs are run.  */
+#if !defined(VMD) && !defined(WINDOWS32) && !defined(_AMIGA) && !defined(__MSDOS__)
+int get_bad_stdin (void);
+#else
+# define get_bad_stdin() (-1)
+#endif
index e537f3a..65182c4 100644 (file)
--- a/output.c
+++ b/output.c
@@ -1,5 +1,5 @@
 /* Output to stdout / stderr for GNU make
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -46,7 +46,7 @@ unsigned int stdio_traced = 0;
 
 #define OUTPUT_ISSET(_out) ((_out)->out >= 0 || (_out)->err >= 0)
 
-#ifdef HAVE_FCNTL
+#ifdef HAVE_FCNTL_H
 # define STREAM_OK(_s) ((fcntl (fileno (_s), F_GETFD) != -1) || (errno != EBADF))
 #else
 # define STREAM_OK(_s) 1
@@ -174,7 +174,7 @@ static sync_handle_t sync_handle = -1;
 
 /* Set up the sync handle.  Disables output_sync on error.  */
 static int
-sync_init ()
+sync_init (void)
 {
   int combined_output = 0;
 
@@ -283,7 +283,7 @@ release_semaphore (void *sem)
 /* Returns a file descriptor to a temporary file.  The file is automatically
    closed/deleted on exit.  Don't use a FILE* stream.  */
 int
-output_tmpfd ()
+output_tmpfd (void)
 {
   int fd = -1;
   FILE *tfile = tmpfile ();
@@ -344,7 +344,7 @@ setup_tmpfile (struct output *out)
   /* If we failed to create a temp file, disable output sync going forward.  */
  error:
   output_close (out);
-  output_sync = 0;
+  output_sync = OUTPUT_SYNC_NONE;
 }
 
 /* Synchronize the output of jobs in -j mode to keep the results of
@@ -441,7 +441,7 @@ output_tmpfile (char **name, const char *template)
 
 # ifdef HAVE_FDOPEN
   /* Can't use mkstemp(), but guard against a race condition.  */
-  fd = open (*name, O_CREAT|O_EXCL|O_WRONLY, 0600);
+  EINTRLOOP (fd, open (*name, O_CREAT|O_EXCL|O_WRONLY, 0600));
   if (fd == -1)
     return 0;
   return fdopen (fd, "w");
@@ -558,7 +558,7 @@ output_close (struct output *out)
 
 /* We're about to generate output: be sure it's set up.  */
 void
-output_start ()
+output_start (void)
 {
 #ifndef NO_OUTPUT_SYNC
   /* If we're syncing output make sure the temporary file is set up.  */
@@ -640,7 +640,7 @@ message (int prefix, size_t len, const char *fmt, ...)
 /* Print an error message.  */
 
 void
-error (const gmk_floc *flocp, size_t len, const char *fmt, ...)
+error (const floc *flocp, size_t len, const char *fmt, ...)
 {
   va_list args;
   char *p;
@@ -651,7 +651,7 @@ error (const gmk_floc *flocp, size_t len, const char *fmt, ...)
   p = get_buffer (len);
 
   if (flocp && flocp->filenm)
-    sprintf (p, "%s:%lu: ", flocp->filenm, flocp->lineno);
+    sprintf (p, "%s:%lu: ", flocp->filenm, flocp->lineno + flocp->offset);
   else if (makelevel == 0)
     sprintf (p, "%s: ", program);
   else
@@ -671,7 +671,7 @@ error (const gmk_floc *flocp, size_t len, const char *fmt, ...)
 /* Print an error message and exit.  */
 
 void
-fatal (const gmk_floc *flocp, size_t len, const char *fmt, ...)
+fatal (const floc *flocp, size_t len, const char *fmt, ...)
 {
   va_list args;
   const char *stop = _(".  Stop.\n");
@@ -683,7 +683,7 @@ fatal (const gmk_floc *flocp, size_t len, const char *fmt, ...)
   p = get_buffer (len);
 
   if (flocp && flocp->filenm)
-    sprintf (p, "%s:%lu: *** ", flocp->filenm, flocp->lineno);
+    sprintf (p, "%s:%lu: *** ", flocp->filenm, flocp->lineno + flocp->offset);
   else if (makelevel == 0)
     sprintf (p, "%s: *** ", program);
   else
index 7c5332c..f4fe065 100644 (file)
--- a/output.h
+++ b/output.h
@@ -1,5 +1,5 @@
 /* Output to stdout / stderr for GNU make
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 83d8838..65184f6 100644 (file)
@@ -8,13 +8,14 @@
 # Please note that the actual code of GNU gettext is covered by the GNU
 # General Public License and is *not* in the public domain.
 #
-# Origin: gettext-0.18
-GETTEXT_MACRO_VERSION = 0.18
+# Origin: gettext-0.19
+GETTEXT_MACRO_VERSION = 0.19
 
 PACKAGE = @PACKAGE@
 VERSION = @VERSION@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 
+SED = @SED@
 SHELL = /bin/sh
 @SET_MAKE@
 
@@ -76,6 +77,16 @@ POTFILES = \
 
 CATALOGS = @CATALOGS@
 
+POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
+POFILESDEPS_yes = $(POFILESDEPS_)
+POFILESDEPS_no =
+POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
+
+DISTFILESDEPS_ = update-po
+DISTFILESDEPS_yes = $(DISTFILESDEPS_)
+DISTFILESDEPS_no =
+DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
+
 # Makevars gets inserted here. (Don't remove this line!)
 
 .SUFFIXES:
@@ -96,14 +107,14 @@ CATALOGS = @CATALOGS@
        mv t-$@ $@
 
 
-all: check-macro-version all-@USE_NLS@
+all: all-@USE_NLS@
 
 all-yes: stamp-po
 all-no:
 
 # Ensure that the gettext macros and this Makefile.in.in are in sync.
-check-macro-version:
-       @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+CHECK_MACRO_VERSION = \
+       test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
          || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
               exit 1; \
             }
@@ -123,6 +134,7 @@ check-macro-version:
 # $(POFILES) has been designed to not touch files that don't need to be
 # changed.
 stamp-po: $(srcdir)/$(DOMAIN).pot
+       @$(CHECK_MACRO_VERSION)
        test ! -f $(srcdir)/$(DOMAIN).pot || \
          test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
        @test ! -f $(srcdir)/$(DOMAIN).pot || { \
@@ -137,11 +149,29 @@ stamp-po: $(srcdir)/$(DOMAIN).pot
 
 # This target rebuilds $(DOMAIN).pot; it is an expensive operation.
 # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+# The determination of whether the package xyz is a GNU one is based on the
+# heuristic whether some file in the top level directory mentions "GNU xyz".
+# If GNU 'find' is available, we avoid grepping through monster files.
 $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
-       if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
-         package_gnu='GNU '; \
+       package_gnu="$(PACKAGE_GNU)"; \
+       test -n "$$package_gnu" || { \
+         if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+                LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \
+                              -size -10000000c -exec grep 'GNU @PACKAGE@' \
+                              /dev/null '{}' ';' 2>/dev/null; \
+              else \
+                LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+              fi; \
+            } | grep -v 'libtool:' >/dev/null; then \
+            package_gnu=yes; \
+          else \
+            package_gnu=no; \
+          fi; \
+       }; \
+       if test "$$package_gnu" = "yes"; then \
+         package_prefix='GNU '; \
        else \
-         package_gnu=''; \
+         package_prefix=''; \
        fi; \
        if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
          msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
@@ -161,7 +191,7 @@ $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
              --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
              --files-from=$(srcdir)/POTFILES.in \
              --copyright-holder='$(COPYRIGHT_HOLDER)' \
-             --package-name="$${package_gnu}@PACKAGE@" \
+             --package-name="$${package_prefix}@PACKAGE@" \
              --package-version='@VERSION@' \
              --msgid-bugs-address="$$msgid_bugs_address" \
            ;; \
@@ -189,9 +219,10 @@ $(srcdir)/$(DOMAIN).pot:
 
 # This target rebuilds a PO file if $(DOMAIN).pot has changed.
 # Note that a PO file is not touched if it doesn't need to be changed.
-$(POFILES): $(srcdir)/$(DOMAIN).pot
+$(POFILES): $(POFILESDEPS)
        @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
        if test -f "$(srcdir)/$${lang}.po"; then \
+         test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \
          test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
          echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
          cd $(srcdir) \
@@ -352,7 +383,7 @@ maintainer-clean: distclean
 
 distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
 dist distdir:
-       $(MAKE) update-po
+       test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
        @$(MAKE) dist2
 # This is a separate target because 'update-po' must be executed before.
 dist2: stamp-po $(DISTFILES)
index b69192e..ee01884 100644 (file)
@@ -1,5 +1,5 @@
 # This is a -*-Makefile-*-
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
index 4287c5d..061ff2b 100644 (file)
@@ -1,5 +1,5 @@
 # List of source files containing translatable strings.
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
@@ -32,6 +32,7 @@ load.c
 main.c
 misc.c
 output.c
+posixos.c
 read.c
 remake.c
 remote-cstms.c
@@ -43,3 +44,4 @@ variable.h
 vmsfunctions.c
 vmsjobs.c
 vpath.c
+w32/w32os.c
index af52487..9dc9630 100644 (file)
@@ -1,3 +1,4 @@
+# This file, Rules-quot, can be copied and used freely without restrictions.
 # Special Makefile rules for English message catalogs with quotation marks.
 
 DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
@@ -14,13 +15,23 @@ en@boldquot.po-update: en@boldquot.po-update-en
 
 .insert-header.po-update-en:
        @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
-       if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+       if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
        tmpdir=`pwd`; \
        echo "$$lang:"; \
        ll=`echo $$lang | sed -e 's/@.*//'`; \
        LC_ALL=C; export LC_ALL; \
        cd $(srcdir); \
-       if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+       if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \
+          | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \
+          { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+            '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \
+              $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \
+              ;; \
+            *) \
+              $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \
+              ;; \
+            esac } 2>/dev/null > $$tmpdir/$$lang.new.po \
+            ; then \
          if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
            rm -f $$tmpdir/$$lang.new.po; \
          else \
index 6c4ecf0..e77d95e 100644 (file)
Binary files a/po/be.gmo and b/po/be.gmo differ
index 7385724..4ca96fe 100644 (file)
--- a/po/be.po
+++ b/po/be.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: make 3.80\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
 "PO-Revision-Date: 2003-10-21 11:50+0300\n"
 "Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n"
 "Language-Team: Belarusian <i18n@mova.org>\n"
@@ -45,84 +45,84 @@ msgstr "touch: удзельнік \"%s\" ня йснуе ў \"%s\""
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr ""
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr ""
 
-#: arscan.c:255
+#: arscan.c:261
 #, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr ""
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr ""
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (назва мусіла быць абрэзана)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Дата %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, рэжым = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr ""
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr ""
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr ""
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr ""
 
-#: commands.c:647
+#: commands.c:645
 #, fuzzy, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Выдаляецца файл \"%s\""
 
-#: commands.c:649
+#: commands.c:647
 #, fuzzy, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Выдаляецца файл \"%s\""
 
-#: commands.c:685
+#: commands.c:683
 #, fuzzy
 msgid "#  recipe to execute"
 msgstr "#  загады для выкананьня"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (убудаваны):"
 
-#: commands.c:690
+#: commands.c:688
 #, fuzzy, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (з\"%s\", радок %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -130,62 +130,62 @@ msgstr ""
 "\n"
 "# Тэчкі\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr ""
 
-#: dir.c:1005
+#: dir.c:1085
 #, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr ""
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr ""
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr ""
 
-#: dir.c:1041
+#: dir.c:1122
 #, c-format
-msgid "# %s (key %s, mtime %d): "
+msgid "# %s (key %s, mtime %ull): "
 msgstr ""
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr ""
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr ""
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Не"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " файлаў, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "не"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr ""
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " так далёка."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr ""
@@ -195,156 +195,156 @@ msgstr ""
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr ""
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr ""
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr ""
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ""
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr ""
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ""
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr ""
 
-#: file.c:401
+#: file.c:408
 #, fuzzy, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Выдаляецца файл \"%s\""
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Выдаляюцца прамежкавыя файлы...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Бягучы час"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: адбітак часу па-за дапушчальнымі межамі, падстаўляецца %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Ня мэта:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr ""
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr ""
 
-#: file.c:964
+#: file.c:971
 #, fuzzy
 msgid "#  Command line target."
 msgstr "загадны радок"
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr ""
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr ""
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr ""
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr ""
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr ""
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr ""
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Так сама робяцца:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Час зьмяненьня ніколі не правяраўся."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Файл ня йснуе."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Файл вельмі стары."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Апошняе зьмяненьне %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Файл быў абноўлены."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Файл ня быў абноўлены."
 
-#: file.c:1001
+#: file.c:1008
 #, fuzzy
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Загады, што выконваюцца зараз (ГЭТА - ПАМЫЛКА)."
 
-#: file.c:1004
+#: file.c:1011
 #, fuzzy
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Загады, што выконваюцца зараз (ГЭТА - ПАМЫЛКА)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Пасьпяхова абноўлены."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr ""
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr ""
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr ""
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -352,111 +352,129 @@ msgstr ""
 "\n"
 "# Файлы"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
 "# "
 msgstr ""
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr ""
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr ""
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr ""
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr ""
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr ""
 
-#: function.c:1499
+#: function.c:1525
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe (): памылка ў process_init_fd()\n"
 
-#: function.c:1523
+#: function.c:1549
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe (): памылка ў process_init_fd()\n"
 
-#: function.c:1530
+#: function.c:1556
 #, fuzzy, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "памылка ў CreatePipe() (e=%d)\n"
 
-#: function.c:1538
+#: function.c:1564
 #, fuzzy
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe (): памылка ў process_init_fd()\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr ""
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, fuzzy, c-format
 msgid "open: %s: %s"
 msgstr "%s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, fuzzy, c-format
 msgid "write: %s: %s"
 msgstr "%s: %s"
 
-#: function.c:2209
-#, c-format
-msgid "Invalid file operation: %s"
+#: function.c:2230 function.c:2267
+#, fuzzy, c-format
+msgid "close: %s: %s"
+msgstr "%s%s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
 msgstr ""
 
-#: function.c:2324
+#: function.c:2262
+#, fuzzy, c-format
+msgid "read: %s: %s"
+msgstr "%s: %s"
+
+#: function.c:2275
+#, fuzzy, c-format
+msgid "file: invalid file operation: %s"
+msgstr "%s: нерэчаісны выбар -- %c.\n"
+
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr ""
 
-#: function.c:2336
+#: function.c:2402
 #, fuzzy, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "Ня зроблена для гэтае плятформы: функцыя \"%s\""
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr ""
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
 msgstr ""
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
 msgstr ""
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
 msgstr ""
 
-#: function.c:2598
+#: function.c:2657
 #, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
+msgid "Invalid minimum argument count (%u) for function %s"
 msgstr ""
 
-#: function.c:2601
+#: function.c:2660
 #, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
+msgid "Invalid maximum argument count (%u) for function %s"
 msgstr ""
 
 #: getopt.c:659
@@ -554,7 +572,7 @@ msgstr ""
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr ""
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr ""
 
@@ -598,212 +616,184 @@ msgstr ""
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Выдаляюцца прамежкавыя файлы...\n"
 
-#: job.c:361
+#: job.c:363
 #, fuzzy
 msgid "Cannot create a temporary file\n"
 msgstr "fwrite (часовы файл)"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr ""
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr ""
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 #, fuzzy
 msgid "<builtin>"
 msgstr " (убудаваны):"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr ""
-
-#: job.c:516 job.c:524
+#: job.c:510
 #, fuzzy, c-format
-msgid "%s[%s] Error %d%s"
+msgid "%s[%s: %s] Error %d%s"
 msgstr "*** [%s] Памылка %d"
 
-#: job.c:519
-#, fuzzy, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "*** [%s] Памылка 0x%x"
-
-#: job.c:529
-#, fuzzy, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s%s: %s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Чакаюцца незавершаныя працы...."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr ""
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr ""
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr ""
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr ""
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr ""
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr ""
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr ""
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr ""
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr ""
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr ""
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
 "Counted %d args in failed launch\n"
 msgstr ""
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr ""
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr ""
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr ""
-
-#: job.c:2056
+#: job.c:1838
 #, fuzzy, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "touch: архіў \"%s\" ня йснуе"
 
-#: job.c:2059
+#: job.c:1841
 #, fuzzy, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s Няма правіла каб зрабіць мэту \"%s\", патрэбную для \"%s\"%s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr ""
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr ""
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr ""
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr ""
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr ""
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr ""
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
 msgstr "%s: загад не адшуканы"
 
-#: job.c:2518
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s: загад не адшуканы"
+
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr ""
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr ""
 
-#: job.c:2765
+#: job.c:2584
 #, fuzzy, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL зьменена (раней \"%s\", зараз \"%s\")"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr ""
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
 msgstr ""
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
 "\t%s\n"
 msgstr ""
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
@@ -832,143 +822,143 @@ msgstr ""
 msgid "Empty symbol name for load: %s"
 msgstr ""
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr ""
 
-#: load.c:244
+#: load.c:256
 #, fuzzy
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Паралельня працы (-j) не падтрымліваюцца на гэтае плятхорме."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Выбары:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr ""
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
 msgstr ""
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr ""
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
 msgstr ""
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
 msgstr ""
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr ""
 "  -h, --help                  Друкуе гэтае паведамленьне й выходзіць.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
 msgstr ""
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
 msgstr ""
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
 "N.\n"
 msgstr ""
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
 msgstr ""
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
 "them.\n"
 msgstr ""
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
 "it.\n"
 msgstr ""
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base        Друкуе нутраную базу даньняў make.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
 msgstr ""
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 
-#: main.c:366
+#: main.c:391
 #, fuzzy
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet        Не адлюстроўваць загады.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -976,63 +966,63 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                               Выключае -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 
-#: main.c:373
+#: main.c:398
 #, fuzzy
 msgid "  --trace                     Print tracing information.\n"
 msgstr ""
 "  -h, --help                  Друкуе гэтае паведамленьне й выходзіць.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory        Друкуе бягучую тэчку.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
 msgstr ""
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
 msgstr ""
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
 msgstr ""
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "пусты радок нерэчаісны ў якасьці назвы файла"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr ""
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr ""
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr ""
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1042,175 +1032,132 @@ msgid ""
 "ExceptionAddress = 0x%p\n"
 msgstr ""
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr ""
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr ""
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr ""
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr ""
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s спынена на 30 сэкундаў..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr ""
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr ""
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr ""
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr ""
-
-#: main.c:1570
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefile са стандартнага ўводу зададзены двойчы."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (часовы файл)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (часовы файл)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Паралельня працы (-j) не падтрымліваюцца на гэтае плятхорме."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr ""
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr ""
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "ствараецца трубаправод прац"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr ""
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr ""
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Абнаўляюцца make-файлы....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr ""
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr ""
 
-#: main.c:2257
+#: main.c:2303
 #, fuzzy, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Makefile \"%s\" ня знойдзен"
 
-#: main.c:2262
+#: main.c:2308
 #, fuzzy, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Makefile \"%s\" ня знойдзен"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr ""
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr ""
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (часовы файл): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ""
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr ""
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Няма мэт"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr ""
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Выкарыстаньне: %s [выбары] [мэта] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1219,7 +1166,7 @@ msgstr ""
 "\n"
 "Гэта праграма пабудавана для %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1228,36 +1175,36 @@ msgstr ""
 "\n"
 "Гэта праграма падубавана для %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Паведамляйце пра памылкі на <bug-make@gnu.org>.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, fuzzy, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "выбар \"-%c\" патрабуе станоўчы цэлы довад"
 
-#: main.c:2871
+#: main.c:2933
 #, fuzzy, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "выбар \"-%c\" патрабуе станоўчы цэлы довад"
 
-#: main.c:3269
+#: main.c:3331
 #, fuzzy, c-format
 msgid "%sBuilt for %s\n"
 msgstr ""
 "\n"
 "Гэта праграма пабудавана для %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, fuzzy, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr ""
 "\n"
 "Гэта праграма падубавана для %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1266,43 +1213,43 @@ msgid ""
 "%sThere is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
 "# Make data base, printed on %s"
 msgstr ""
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
 "# Finished Make data base on %s\n"
 msgstr ""
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Невядомая памылка %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: карыстальнік %lu (насамрэч %lu), група %lu (насамрэч %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr ""
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr ""
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr ""
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr ""
 
@@ -1364,363 +1311,403 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "ствараецца трубаправод прац"
+
+#: posixos.c:72 posixos.c:227
+#, fuzzy
+msgid "duping jobs pipe"
+msgstr "ствараецца трубаправод прац"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr ""
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr ""
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr ""
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr ""
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr ""
+
+#: posixos.c:268
+#, fuzzy
+msgid "pselect jobs pipe"
+msgstr "ствараецца трубаправод прац"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr ""
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Чытаюцца make-файлы...\n"
 
-#: read.c:335
+#: read.c:329
 #, fuzzy, c-format
 msgid "Reading makefile '%s'"
 msgstr "Чытаецца make-файл \"%s\""
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (няма дапомнае мэты)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (пошук шляху)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr ""
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr ""
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr ""
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr ""
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr ""
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr ""
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr ""
 
-#: read.c:1041
+#: read.c:1034
 #, fuzzy
 msgid "missing rule before recipe"
 msgstr "прапушчана правіла перад загадамі"
 
-#: read.c:1131
+#: read.c:1124
 #, fuzzy
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr " (вы маеце на ўвазе TAB замест 8 прагалаў?)"
 
-#: read.c:1133
+#: read.c:1126
 #, fuzzy
 msgid "missing separator"
 msgstr "прапушчан падзяляльнік %s"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr ""
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr ""
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr ""
 
-#: read.c:1398
+#: read.c:1390
 #, fuzzy
 msgid "missing 'endif'"
 msgstr "прапушчаны \"endif\""
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr ""
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr ""
 
-#: read.c:1496
+#: read.c:1488
 #, fuzzy
 msgid "missing 'endef', unterminated 'define'"
 msgstr "прапушчаны \"endef\", незавершаны \"define\""
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr ""
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr ""
 
-#: read.c:1596
+#: read.c:1589
 #, fuzzy, c-format
 msgid "extraneous '%s'"
 msgstr "зьнешні \"%s\""
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr ""
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr ""
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr ""
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr ""
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr ""
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr ""
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr ""
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr ""
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr ""
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr ""
 
-#: read.c:2229
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr ""
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr ""
 
-#: remake.c:230
+#: remake.c:225
 #, fuzzy, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Нічога ня было зроблена для \"%s\"."
 
-#: remake.c:231
+#: remake.c:226
 #, fuzzy, c-format
 msgid "'%s' is up to date."
 msgstr "\"%s\" - састарэл(а)."
 
-#: remake.c:303
+#: remake.c:322
 #, fuzzy, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Усё яшэ абнаўляецца файл \"%s\".\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%s Няма правіла каб зрабіць мэту \"%s\", патрэбную для \"%s\"%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sНяма правіла каб зрабіць мэту \"%s\"%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr ""
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr ""
 
-#: remake.c:445
+#: remake.c:460
 #, fuzzy, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Файл \"%s\" ужо быў разгледжаны.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, fuzzy, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Усё яшэ абнаўляецца файл \"%s\".\n"
 
-#: remake.c:458
+#: remake.c:473
 #, fuzzy, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Скончана абнаўленьне файла \"%s\".\n"
 
-#: remake.c:487
+#: remake.c:502
 #, fuzzy, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Файл \"%s\" ня йснуе.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
 msgstr ""
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr ""
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr ""
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr ""
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr ""
 
-#: remake.c:675
+#: remake.c:690
 #, fuzzy, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Скончана абнаўленьне файла \"%s\".\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr ""
 
-#: remake.c:695
+#: remake.c:710
 #, fuzzy, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Скончана абнаўленьне файла \"%s\".\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr ""
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr ""
 
-#: remake.c:757
+#: remake.c:772
 #, fuzzy, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Файл \"%s\" ня йснуе.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr ""
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr ""
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr ""
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr ""
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr ""
 
-#: remake.c:803
+#: remake.c:818
 #, fuzzy, c-format
 msgid "No need to remake target '%s'"
 msgstr "%sНяма правіла каб зрабіць мэту \"%s\"%s"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr ""
 
-#: remake.c:825
+#: remake.c:840
 #, fuzzy, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "%sНяма правіла каб зрабіць мэту \"%s\"%s"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr ""
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr ""
 
-#: remake.c:847
+#: remake.c:862
 #, fuzzy, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "%sНяма правіла каб зрабіць мэту \"%s\"%s"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr ""
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr ""
 
-#: remake.c:1048
+#: remake.c:1063
 #, fuzzy, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Невядомы ўбудаваны загад \"%s\".\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Увага! Файл \"%s\" мае час зьмяненьня, які шчэ не надышоў."
 
-#: remake.c:1411
+#: remake.c:1443
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Увага! Файл \"%s\" мае час зьмяненьня %.2g с, які шчэ не надышоў."
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ""
@@ -1730,30 +1717,30 @@ msgstr ""
 msgid "Customs won't export: %s\n"
 msgstr ""
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
 msgstr ""
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
 msgstr ""
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
 "# %u implicit rules, %u"
 msgstr ""
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " тэрмінал."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr ""
@@ -1914,14 +1901,14 @@ msgstr "Запыт аб зьвестках"
 msgid "Floating point co-processor not available"
 msgstr ""
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
 msgstr ""
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -1929,75 +1916,75 @@ msgid ""
 "B\n"
 msgstr ""
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr ""
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
 "%s strcache performance: lookups = %lu / hit rate = %lu%%\n"
 msgstr ""
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
 msgstr ""
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "аўтаматычна"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "дапомны"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "асяродзьдзе"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "make-файл"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr ""
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "загадны радок"
 
-#: variable.c:1617
+#: variable.c:1647
 #, fuzzy
 msgid "'override' directive"
 msgstr "дырэктыва \"override\""
 
-#: variable.c:1628
+#: variable.c:1658
 #, fuzzy, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (з \"%s\", радок %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr ""
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2005,19 +1992,19 @@ msgstr ""
 "\n"
 "# Пераменныя\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
 msgstr ""
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
 msgstr ""
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2034,117 +2021,107 @@ msgstr "Увага! Нявызначаная пераменная \"%.*s\""
 msgid "sys$search() failed with %d\n"
 msgstr ""
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr ""
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr ""
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr ""
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr ""
 
-#: vmsjobs.c:501
+#: vmsjobs.c:1228
 #, c-format
-msgid "BUILTIN ECHO %s->%s\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Невядомы ўбудаваны загад \"%s\".\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Памылка! Парожні загад.\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Перанакіраваны ўвод з %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr ""
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, fuzzy, c-format
 msgid "Append output to %s\n"
 msgstr "Перанакіраваны вывад у %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Перанакіраваны вывад у %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr ""
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr ""
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr ""
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
 msgstr ""
 
-#: vpath.c:600
+#: vpath.c:620
 #, fuzzy
 msgid "# No 'vpath' search paths."
 msgstr " (пошук шляху)"
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
 "# %u 'vpath' search paths.\n"
 msgstr ""
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
 msgstr ""
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
 "# "
 msgstr ""
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr ""
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr ""
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr ""
+
+#~ msgid "*** [%s] Error 0x%x"
+#~ msgstr "*** [%s] Памылка 0x%x"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Памылка! Парожні загад.\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Перанакіраваны ўвод з %s\n"
+
 #~ msgid "Do not specify -j or --jobs if sh.exe is not available."
 #~ msgstr "Не задавайце -j ці --jobs, калі sh.exe недаступны."
 
index e8cbeaf..ff86431 100644 (file)
Binary files a/po/cs.gmo and b/po/cs.gmo differ
index 9e6fa8b..796bb06 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -1,7 +1,7 @@
 # Czech translation of make.
 # Copyright (C) 2010 Free Software Foundation, Inc.
 # This file is distributed under the same license as the make package.
-# Petr Pisar <petr.pisar@atlas.cz>, 2011, 2013.
+# Petr Pisar <petr.pisar@atlas.cz>, 2011, 2013, 2014, 2016.
 #
 # directive → klíčové slovo (nepřekládat jako příkaz kvůli záměně)
 # hash → haš (zapisovat česky)
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: make 4.0\n"
+"Project-Id-Version: make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-10-09 21:24+0200\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-24 21:35+02:00\n"
 "Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
 "Language: cs\n"
@@ -65,85 +65,85 @@ msgstr "touch: Prvek „%s“ v „%s“ neexistuje"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: Chybný návratový kód z funkce ar_member_touch volané nad „%s“"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 "funkce lbr$set_module() nedokázala vytáhnout údaje o modulu, status = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "funkce lbr$ini_control() selhala se stavem = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "není možné otevřít knihovnu „%s“ potřebnou k najití prvku „%s“"
+msgstr "není možné otevřít knihovnu „%s“ potřebnou k najití stav prvku %d"
 
 # TODO: Pluralize
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Prvek „%s“%s: %'ld bajtů at %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (název může být zkrácen)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Datum %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  UID = %d, GID = %d, práva = 0%o\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "Návod má příliš mnoho řádků (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Přerušeno.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Prvek archivu „%s“ je možná chybný, nesmazáno"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Prvek archivu „%s“ ne možná chybný, nesmazáno"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Maže se soubor „%s“"
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Maže se soubor „%s“"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  spustitelný návod"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (vestavěný):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (z „%s“, řádek %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -151,65 +151,65 @@ msgstr ""
 "\n"
 "# Adresáře\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: nebylo možné nad ním zavolat stat().\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (klíč %s, čas změny obsahu %d): nebylo možné otevřít.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (zařízení %d, iuzel [%d,%d,%d]): nebylo možné otevřít.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (zařízení %ld, iuzel %ld): nebylo možné otevřít.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (klíč %s, čas změny obsahu %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (zařízení %d, iuzel [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (zařízení %ld, iuzel %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Žádný"
 
 # TODO: Pluralize
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " souborů, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "žádný "
 
 # TODO: Pluralize
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " nemožností "
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " zatím."
 
 # TODO: Pluralize
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " nemožností v %lu adresářích.\n"
@@ -219,155 +219,155 @@ msgstr " nemožností v %lu adresářích.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Rekurzivní proměnná „%s“ odkazuje na sebe (nakonec)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "neukončený odkaz na proměnnou"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Návod byl určen pro soubor „%s“ v %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr "Návod pro soubor „%s“ byl nalezen hledáním implicitních pravidel,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "ale „%s“ se nyní považuje za soubor totožný s „%s“."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "Návod pro „%s“ bude ignorován ve prospěch návodu pro „%s“."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 "„%s“ s jednoduchou dvojtečkou nelze přejmenovat na „%s“ s dvojitou dvojtečkou"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr ""
 "„%s“ s dvojitou dvojtečkou nelze přejmenovat na „%s“ s jednoduchou dvojtečkou"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "Maže se mezilehlý soubor „%s“ "
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Odstraňují se mezilehlé soubory…\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Aktuální čas"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Časový údaj mimo rozsah, nahrazuje se %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Není cílem:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Cenný soubor (prerekvizita k .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Falešný cíl (prerekvizita k .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Cíl příkazové řádky."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Default, MAKEFILES nebo -include/sinclude makefile."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "#  Vestavěné pravidlo"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Hledalo se za pomoci implicitních pravidel."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Nehledalo se za pomoci implicitních pravidel."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Kořen implicitního/statického vzoru: „%s“\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Soubor je mezilehlá prerekvizita."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Rovněž vyrábí:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Čas změny obsahu se nikdy nekontroluje."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Soubor neexistuje."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Soubor je velmi starý."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Obsah naposledy změněn v %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Soubor byl aktualizován."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Soubor nebyl aktualizován."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Návod se právě vykonává (TOTO JE CHYBA)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Návod pro závislosti se právě vykonává (TOTO JE CHYBA)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Úspěšně aktualizováno."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Je třeba aktualizovat (-q je nastaveno)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Aktualizace selhala."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Neplatná hodnota v členu „command_state“!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -375,7 +375,7 @@ msgstr ""
 "\n"
 "# Soubory"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -385,106 +385,123 @@ msgstr ""
 "# Statistika hašovací tabulky souborů:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: Položka „%s“ není v keši: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "nečíselný první argument funkce „word“"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "první argument funkce „word“ musí být vetší než 0"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "nečíselný první argument funkce „wordlist“"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "nečíselný druhý argument funkce „wordlist“"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(vstup) selhalo (chyba=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr ""
 "windows32_openpipe: DuplicateHandle(chybový výstup) selhalo (chyba=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() selhalo (chyba=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() selhalo\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Dočasný dávkový soubor %s se uklízí\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "soubor: chybí název souboru"
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "otevření: %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "zápis: %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr "Neplatná operace na souboru: %s"
+msgid "close: %s: %s"
+msgstr "zavření: %s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "soubor: příliš mnoho argumentů"
 
-#: function.c:2324
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr "čtení: %s: %s"
+
+#: function.c:2275
+#, c-format
+msgid "file: invalid file operation: %s"
+msgstr "soubor: neplatná operace na souboru: %s"
+
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "nedostatečný počet argumentů (%d) funkce „%s“"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "na této platformě neimplementováno: funkce „%s“"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "neukončené volání funkce „%s“: chybí „%c“"
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "Prázdný název funkce\n"
+msgstr "Prázdný název funkce"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "Neplatný název funkce: %s\n"
+msgstr "Neplatný název funkce: %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "Název funkce je příliš dlouhý: %s\n"
+msgstr "Název funkce je příliš dlouhý: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "Neplatný minimální počet argumentů (%d) funkce %s\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "Neplatný minimální počet argumentů (%d) funkce %s"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "Neplatný maximální počet argumentů (%d) funkce %s\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "Neplatný maximální počet argumentů (%d) funkce %s"
 
 #: getopt.c:659
 #, c-format
@@ -582,7 +599,7 @@ msgstr "Hledá se implicitní pravidlo pro „%s“.\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Hledá se implicitní pravidlo prvku archivu pro „%s“.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Zabraňuje se rekurzi implicitního pravidla.\n"
 
@@ -626,102 +643,78 @@ msgstr "Nalezena prerekvizita „%s“ jako VPATH „%s“\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Hledá se pravidlo s mezilehlým souborem „%s“.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Dočasný soubor nelze vytvořit\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (obraz paměti uložen)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (ignorováno)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<vestavěný>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: návod pro cíl „%s“ selhal"
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "%s[%s] Chyba %d%s"
-
-#: job.c:519
+#: job.c:510
 #, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Chyba 0x%x%s"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] Chyba %d%s"
 
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Čeká se na nedokončené úlohy…"
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Živý potomek %p (%s) PID %s %s\n"
 
 # Continuation of Live child
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (vzdálený)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Uklízí se prohrávající potomek %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Uklízí se vyhrávající potomek %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Uklízí se dočasný dávkový soubor %s\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Úklid dočasného dávkového souboru %s selhal (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Z řetězce se odstraňuje potomek %p PID %s%s.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "uvolnění semaforu správce úloh: (Chyba %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Uvolněn token pro potomka %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "zápis správce úloh"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() nedokázala spustit proces (chyba=%ld)\n"
 
 # FIXME: Pluralize
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -730,97 +723,93 @@ msgstr ""
 "\n"
 "Napočítáno %d argumentů v selhaném spuštění\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Do řetězce se přidává potomek %p (%s) PID %s%s.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "čekání na semafor nebo potomka: (Chyba %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Získán token pro potomka %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "čtení z roury úloh"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: cíl „%s“ neexistuje"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: aktualizovat cíl „%s“ potřebný pro %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "na tomto operačním systému nelze vynutit omezení zátěže"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "omezení zátěže nelze vynutit: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "nedostatek deskriptorů souboru: standardní vstup nelze zduplikovat\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "nedostatek deskriptorů souboru: standardní výstup nelze zduplikovat\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "nedostatek deskriptorů souboru: chybový výstup nelze zduplikovat\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Standardní vstup nelze obnovit\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Standardní výstup nelze obnovit\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "Chybový výstup nelze obnovit\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "make uklidil potomka s PID %s, stále se čeká na PID %s\n"
 
-#: job.c:2458
+#: job.c:2275
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: Příkaz nenalezen"
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: Příkaz nenalezen\n"
 
-#: job.c:2518
+#: job.c:2277
+#, c-format
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: Příkaz nenalezen\n"
+
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Program shellu nenalezen"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: možná byl vyčerpán prostor pro prostředí"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "Proměnná $SHELL se změnila (byla „%s“, nyní je „%s“)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Vytváří se dočasný dávkový soubor %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -828,7 +817,7 @@ msgstr ""
 "Obsah dávkového souboru:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -837,7 +826,7 @@ msgstr ""
 "Obsah dávkového souboru:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (řádek %d) Chybný kontext shellu (!unixy && !batch_mode_shell)\n"
@@ -867,28 +856,28 @@ msgstr "Symbol %s z %s se nepodařilo zavést: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "Pokus zavést prázdný název symbolu: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Zavádí se symbol %s z %s\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Na této platformě není operace zavedení (load) podporována."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Přepínače:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Ignoruje se kvůli kompatibilitě.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make           Bezpodmínečně vyrobí všechny cíle.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -896,17 +885,17 @@ msgstr ""
 "  -C ADRESÁŘ, --directory=ADRESÁŘ\n"
 "                              Před děláním čehokoliv se přepne do ADRESÁŘE.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          Vypisuje mnoho ladicích údajů.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=PŘÍZNAKY]          Vypisuje ladicí údaje rozličných druhů.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -914,12 +903,12 @@ msgstr ""
 "  -e, --environment-overrides\n"
 "                              Proměnné prostředí přebijí ty z makefilu.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr "  --eval=ŘETĚZEC              Vyhodnotí ŘETĚZEC jako kód makefilu.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -927,15 +916,15 @@ msgstr ""
 "  -f SOUBOR, --file=SOUBOR, --makefile=SOUBOR\n"
 "                              Načte SOUBOR coby makefile.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Vypíše tuto zprávu a skončí.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr "  -i, --ignore-errors         Ignoruje chyby z návodů.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -943,7 +932,7 @@ msgstr ""
 "  -I ADRESÁŘ, --include-dir=ADRESÁŘ\n"
 "                              Vložené makefily hledá v ADRESÁŘI.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -951,13 +940,13 @@ msgstr ""
 "  -j [N], --jobs[=N]          Dovolí nejvíce N úloh najednou;\n"
 "                              nekonečno úloh bez argumentu.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Pokračuje, když některé cíle nelze vyrobit.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -967,7 +956,7 @@ msgstr ""
 "                              Nespouští souběžné úlohy, dokud zátěž\n"
 "                              neklesne pod N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -975,7 +964,7 @@ msgstr ""
 "  -L, --check-symlink-times   Použije nejnovější čas změny obsahu z časů\n"
 "                              symbolických odkazů a cíle.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -985,7 +974,7 @@ msgstr ""
 "                              Ve skutečnosti nevykoná žádný návod, pouze\n"
 "                              jej vypíše.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -995,7 +984,7 @@ msgstr ""
 "                              Považuje SOUBOR za velmi starý a znovu jej\n"
 "                              nevyrobí.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -1004,11 +993,11 @@ msgstr ""
 "                              Synchronizuje výstup souběžných úloh podle "
 "DRUHU.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       Vypíše vnitřní databázi programu make.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1016,19 +1005,19 @@ msgstr ""
 "  -q, --question              Nespustí žádný návod. Návratový kód řekne,\n"
 "                              jestli je aktuální.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr "  -r, --no-builtin-rules      Vypne vestavěná implicitní pravidla.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr "  -R, --no-builtin-variables  Vypne vestavěné nastavení proměnných.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Neopisuje návod.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1036,32 +1025,32 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Vypne -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr "  -t, --touch                 Namísto výroby cílů jim změní čas.\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                     Vypisuje trasovací údaje.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 "  -v, --version               Vypíše číslo verze programu make a skončí.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Vypisuje aktuální adresář.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
 msgstr ""
 "  --no-print-directory        Vypne -w, i kdyby byl zapnut implicitně.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1069,7 +1058,7 @@ msgstr ""
 "  -W SOUBOR, --what-if=SOUBOR, --new-file=SOUBOR, --assume-new=SOUBOR\n"
 "                              Považuje SOUBOR za nekonečně nový.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1077,26 +1066,26 @@ msgstr ""
 "  --warn-undefined-variables  Upozorní, kdykoliv je odkazováno na\n"
 "                              nedefinovanou proměnnou.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "prázdný řetězec není platný název souboru"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "zadána neznámá úroveň ladění „%s“"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "neznámý druh synchronizace výstupu „%s“"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: Zachyceno přerušení/výjimka (kód = 0x%lx, adresa = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1111,179 +1100,135 @@ msgstr ""
 "Příznaky výjimky = %lx\n"
 "Adresa výjimky = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Porušení přístupu: operace zápisu na adrese 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Porušení přístupu: operace čtení na adrese 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() nastavuje default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr ""
 "find_and_set_shell() při prohledávání cesty nastavila default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s se uspí na 30 sekund…"
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "sleep(30) dokončeno. Pokračuje se.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-"vnitřní chyba: nelze otevřít semafor správce úloh „%s“: (Chyba %ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Klient správce úloh (semafor %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "vnitřní chyba: neplatný řetězec --jobserver-fds „%s“"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Klient správce úloh (deskriptory %d,%d)\n"
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr "pozor: -jN vnuceno podřízenému maku: režim správce úloh se vypíná."
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "služba dup() nad správcem úloh"
-
-#: main.c:1570
+#: main.c:1627
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
 "pozor: správce úloh není dostupný: použije se -j1. Do nadřízeného pravidla "
 "maku přidejte „+“."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr "pozor: -jN vnuceno podřízenému maku: režim správce úloh se vypíná."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefile na standardním vstupu uveden dvakrát."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (dočasný soubor)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (dočasný soubor)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Na této platformě nejsou paralelní úlohy (-j) podporovány."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Návrat k jednoúlohovému režimu (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Místa ve správci úloh jsou omezena na %d\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "vytváření semaforu správce úloh: (Chyba %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "vytváření roury úloh"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "inicializace roury správce úloh"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Symbolické odkazy nejsou podporovány: vypíná se -L."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Soubory makefile se aktualizují…\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "Makefile „%s“ může cyklit, nebude znovu vyroben.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Výroba nového makefilu „%s“ selhala."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Vložený makefile „%s“ nebyl nalezen."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Makefile „%s“ nebyl nalezen"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Nebylo možné se vrátit do původního adresáře."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Znovu se spouští [%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (dočasný soubor): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL obsahuje více než jeden cíl"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Nezadány žádné cíle a žádné makefily nenalezeny"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Žádné cíle"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Aktualizují se cíle…\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr "pozor: Zjištěn posun hodin. Vaše sestavení možná nebude úplné."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Použití: %s [PŘEPÍNAČE] [CÍLE]…\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1292,7 +1237,7 @@ msgstr ""
 "\n"
 "Tento program byl sestaven pro %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1301,34 +1246,34 @@ msgstr ""
 "\n"
 "Tento program byl sestaven pro %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr ""
 "Chyby v programu hlaste anglicky na <bug-make@gnu.org>. Nedostatky\n"
 "v překladu hlaste česky na <translation-team-cs@lists.sourceforge.net>.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "přepínače „%s%s“ vyžaduje neprázdný řetězcový argument"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "přepínač „-%c“ vyžaduje kladný celočíselný argument"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sSestaveno pro %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%s Sestaveno pro %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1342,7 +1287,7 @@ msgstr ""
 "%sNesposkytuje se ŽÁDNÁ ZÁRUKA, jak jen zákon dovoluje.\n"
 
 # FIXME: i18n %s (time)
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1352,7 +1297,7 @@ msgstr ""
 "# Databáze maku vypsána v %s"
 
 # FIXME: i18n %s (time)
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1361,29 +1306,29 @@ msgstr ""
 "\n"
 "# Konec databáze maku v %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Neznámá chyba %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: uživatel %lu (reálný %lu), skupina %lu (reálná %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Přístup zahájen"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Přístup uživatelem"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Přístup makem"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Přístup potomkem"
 
@@ -1428,9 +1373,8 @@ msgid "%s[%u]: Leaving directory '%s'\n"
 msgstr "%s[%u]: Opouští se adresář „%s“\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "chyba zápisu: %s"
+msgstr "chyba zápisu: standardní výstup"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1446,225 +1390,260 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "vytváření roury úloh"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "duplikace roury úloh"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "inicializace roury správce úloh"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "vnitřní chyba: neplatný řetězec --jobserver-auth „%s“"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Klient správce úloh (deskriptory %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "kolona správce úloh"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "zápis správce úloh"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "volání pselect nad rourou úloh"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "čtení z roury úloh"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Čtou se makefily…\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "Čte se makefile „%s“"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (žádný výchozí cíl)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (vyhledávací cesta)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (nestarat se)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (žádný expanze ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "Přeskakuje se UTF-8 BOM v makefilu „%s“\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "Přeskakuje se UTF-8 BOM v paměti makefilu\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "neplatná syntaxe podmínky"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: zavedení selhalo"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "návod zahájen před prvním cílem"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "před návodem chybí pravidlo"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (mysleli jste tabulátor místo 8 mezer?)"
+msgstr "chybí oddělovač (mysleli jste tabulátor místo 8 mezer?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "chybí oddělovač%s"
+msgstr "chybí oddělovač"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "chybí vzor cíle"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "více vzorů cíle"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "vzor cíle neobsahuje „%%“"
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "chybí „endif“"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "prázdný název proměnné"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "nadbytečný text po klíčovém slovu „define“"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "chybí „endef“, neukončený „define“"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "nadbytečný text po klíčovém slovu „endef“"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "nadbytečný text po klíčovém slovu „%s“"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "nadbytečný „%s“"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "pouze jeden „else“ na podmínku"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Chybě utvořená definice proměnné specifické pro cíl"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "prerekvizitu nelze definovat v návodu"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "smíšené implicitní a statická pravidla vzorů"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "smíšené implicitní a normální pravidla"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "cíl „%s“ neodpovídá vzoru cíle"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "cílový soubor „%s“ obsahuje jak :, tak i ::"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "cíl „%s“ zadán více než jednou ve stejném pravidle"
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "pozor: návod pro cíl „%s“ bude přebit"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "pozor: starý návod pro cíl „%s“ bude ignorován"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "smíšené implicitní a normální pravidla"
+msgstr "*** smíšená implicitní a normální pravidla: zastaralá skladba"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "pozor: zaznamenán znak NUL, zbytek řádku bude ignorován"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Pro „%s“ nebude nic uděláno."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "„%s“ je aktuální."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Uklízí se soubor „%s“.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%sŽádné pravidlo jak vyrobit cíl „%s“ potřebný pro „%s“%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sŽádné pravidlo jak vyrobit cíl „%s“%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Zvažuje se cílový soubor „%s“.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Nedávná aktualizace souboru „%s“ selhala.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Soubor „%s“ již byl uvážen.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Stále se aktualizuje soubor „%s“.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Aktualizace soubor „%s“ dokončena.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Soubor „%s“ neexistuje.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1672,138 +1651,138 @@ msgstr ""
 "*** Pozor: Soubor .LOW_RESOLUTION_TIME „%s“ má časový údaj ve vysokém "
 "rozlišení"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Nalezeno implicitní pravidlo pro „%s“.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Pro „%s“ nenalezeno žádné implicitní pravidlo.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Pro „%s“ se použije výchozí návod.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Kruhová závislost „%s ← %s zahozena."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Prerekvizity cílového souboru „%s“ dokončeny.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Prerekvizity „%s“ se vyrábějí.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Výroba cílového souboru „%s“ vzdána.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Cíl „%s“ nebyl kvůli chybám znovu vyroben."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Prerekvizita „%s“ pro cíl „%s“ je jen o pořadí.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Prerekvizita „%s“ cíle „%s“ neexistuje.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Prerekvizita „%s“ je novější než cíl „%s“.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Prerekvizita „%s“ je starší než cíl „%s“.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "Cíl „%s“ je dvojdvoutečkový a nemá žádnou prerekvizitu.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "Pro „%s“ neexistuje návod a žádná prerekvizita se vskutku nezměnila.\n"
 
 # Always-make flag is make option -B
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Vyrábí se „%s“ kvůli přepínači --always-make.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "Cíl „%s“ není třeba znovu vyrábět"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; použije se název „%s“ z VPATH"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Cíl „%s“ je třeba znovu vyrobit.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  Ignoruje se název „%s“ z VPATH.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Právě se vykonává návod pro „%s“.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Cílový soubor „%s“ nebylo možné znovu vyrobit.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Cílový soubor „%s“ byl úspěšně znovu vyroben.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Cílový soubor „%s“ je třeba znovu vyrobit za použití -q.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Pro „%s„ se použijí se výchozí příkazy.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Pozor: Soubor „%s“ má čas změny obsahu v budoucnu"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Pozor: Soubor „%s“ má čas změny obsahu %s s směrem do budoucnosti"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "Prvek .LIBPATTERNS „%s“ není vzorem"
@@ -1814,7 +1793,7 @@ msgstr "Prvek .LIBPATTERNS „%s“ není vzorem"
 msgid "Customs won't export: %s\n"
 msgstr "Customs nebude exportovat: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1822,7 +1801,7 @@ msgstr ""
 "\n"
 "# Implicitní pravidla"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1831,7 +1810,7 @@ msgstr ""
 "# Žádná implicitní pravidla."
 
 # FIXME: Pluralize by first %u
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1840,11 +1819,11 @@ msgstr ""
 "\n"
 "# Implicitních pravidel: %u, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminál."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "CHYBA: num_pattern_rules je chybný! %u != %u"
@@ -2009,7 +1988,7 @@ msgstr "Žádost o informaci (SIGINFO)"
 msgid "Floating point co-processor not available"
 msgstr "Koprocesor pro práci s pohyblivou řádkou není dostupný (SIGNOFP)"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -2018,7 +1997,7 @@ msgstr ""
 "\n"
 "%s Žádná keš řetězců\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2029,7 +2008,7 @@ msgstr ""
 "%s užito z keše řetězců: %lu (%lu) / řetězců = %lu / úložiště = %lu B / "
 "prům.  = %lu B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
@@ -2037,12 +2016,12 @@ msgstr ""
 "%s současná keš: velikost = %hu B / užito = %hu B / počet = %hu / prům. = "
 "%hu B\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s užito dalších: celkem = %lu B / počet = %lu / prům. = %lu B\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
@@ -2050,7 +2029,7 @@ msgstr ""
 "%s volno dalších: celkem = %lu B / max. = %lu B / min. = %lu B / prům.  = "
 "%hu B\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2059,7 +2038,7 @@ msgstr ""
 "\n"
 "%s vytížení keše řetězců: dotazů = %lu / poměr nálezů = %lu %%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2067,44 +2046,44 @@ msgstr ""
 "# Statistika hašovací tabulky:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automatická"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "výchozí"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "prostředí"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "prostředí z přepínače -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "příkazový řádek"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "klíčové slovo „override“"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (z „%s“, řádek %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# statistika hašovací tabulky pro množinu proměnných:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2112,7 +2091,7 @@ msgstr ""
 "\n"
 "# Proměnné\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2120,7 +2099,7 @@ msgstr ""
 "\n"
 "# Hodnoty proměnných specifických pro vzor"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2129,7 +2108,7 @@ msgstr ""
 "# Žádné hodnoty proměnných specifických pro vzor."
 
 # FIXME: Pluralize
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2148,87 +2127,37 @@ msgstr "pozor: nedefinovaná proměnná „%.*s“"
 msgid "sys$search() failed with %d\n"
 msgstr "volání sys$search() selhalo s %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Pozor: Prázdné přesměrování\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "vnitřní chyba: command_state pro „%s“"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr "-pozor, možná byste měli znovu povolit obsluhu CTRL-Y z DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "VESTAVĚNÝ [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
-msgstr "VESTAVĚNÝ CD %s\n"
+msgstr "VESTAVĚNÝ PŘÍKAZ CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "VESTAVĚNÝ CD %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Neznámý vestavěný příkaz „%s“\n"
-
-#: vmsjobs.c:592
+#: vmsjobs.c:1228
 #, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Chyba, prázdný příkaz\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Vstup přesměrován z %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Chyby přesměrovány do %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Výstup připojen k %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Výstup přesměrován do %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Připojit %.*s a uklidit\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Místo toho se spustí %s\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Chyba oddělení podprocesu, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2236,12 +2165,12 @@ msgstr ""
 "\n"
 "# Vyhledávací cesty VPATH\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# Žádné vyhledávací cesty „vpath“."
 
 # FIXME: Pluralize
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2250,7 +2179,7 @@ msgstr ""
 "\n"
 "$ Vyhledávacích cest „vpath“: %u\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2258,7 +2187,7 @@ msgstr ""
 "\n"
 "# Žádná obecná vyhledávací cesta (proměnná „VPATH“)."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2268,6 +2197,83 @@ msgstr ""
 "# Obecná vyhledávací cesta (proměnná „VPATH“):\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Místa ve správci úloh jsou omezena na %d\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "vytváření semaforu správce úloh: (Chyba %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"vnitřní chyba: nelze otevřít semafor správce úloh „%s“: (Chyba %ld: %s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Klient správce úloh (semafor %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "uvolnění semaforu správce úloh: (Chyba %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "čekání na semafor nebo potomka: (Chyba %ld: %s)"
+
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s: návod pro cíl „%s“ selhal"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] Chyba 0x%x%s"
+
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
+#~ msgid "dup jobserver"
+#~ msgstr "služba dup() nad správcem úloh"
+
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Pozor: Prázdné přesměrování\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "vnitřní chyba: command_state pro „%s“"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "VESTAVĚNÝ [%s][%s]\n"
+
+#~ msgid "BUILTIN ECHO %s->%s\n"
+#~ msgstr "VESTAVĚNÝ PŘÍKAZ ECHO %s → %s\n"
+
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Neznámý vestavěný příkaz „%s“\n"
+
+#~ msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+#~ msgstr "Vestavěný příkaz není v ONESHELL znám nebo podporován: „%s“\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Chyba, prázdný příkaz\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Vstup přesměrován z %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Chyby přesměrovány do %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Výstup přesměrován do %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Chyba oddělení podprocesu, %d\n"
+
 #~ msgid "internal error: multiple --sync-mutex options"
 #~ msgstr "vnitřní chyba: více přepínačů --sync-mutex"
 
index 02fa310..f3fc4f4 100644 (file)
Binary files a/po/da.gmo and b/po/da.gmo differ
index 8640291..bd71c29 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: make 3.82\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
 "PO-Revision-Date: 2011-01-05 02:26+0100\n"
 "Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -47,83 +47,83 @@ msgstr "touch: Medlemmet '%s' findes ikke i '%s'"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: Forkert returkode fra ar_member_touch på '%s'"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr "lbr$set_module() kunne ikke udtrække modulinformation, status = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control() fejlede med status = %d"
 
-#: arscan.c:255
+#: arscan.c:261
 #, fuzzy, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr "kan ikke åbne biblioteket '%s' for at søge medlemmet '%s'"
 
-#: arscan.c:944
+#: arscan.c:965
 #, fuzzy, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Medlem '%s'%s: %ld byte ved %ld (/%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (navnet kan være forkortet)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Tidsstempel %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, modus = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr ""
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Afbrydelse.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, fuzzy, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Arkivmedlemmet '%s' er måske falsk; ikke slettet"
 
-#: commands.c:633
+#: commands.c:631
 #, fuzzy, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Arkivmedlemmet '%s' er måske falsk; ikke slettet"
 
-#: commands.c:647
+#: commands.c:645
 #, fuzzy, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Sletter filen '%s'"
 
-#: commands.c:649
+#: commands.c:647
 #, fuzzy, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Sletter filen '%s'"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  kommandoer der skal køres"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (indbyggede):"
 
-#: commands.c:690
+#: commands.c:688
 #, fuzzy, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (fra '%s', linje %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -131,62 +131,62 @@ msgstr ""
 "\n"
 "# Filkataloger\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: kunne ikke undersøges med stat.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (nøgle %s, mtime %d): kunne ikke åbnes.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (enhed %d, inode [%d,%d,%d]): kunne ikke åbnes.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (enhed %ld, inode %ld): kunne ikke åbnes.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (nøgle %s, mtime %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (enhed %d, inode [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (enhed %ld, inode %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Ingen"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " filer, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "ingen"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " umuligheder"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " indtil videre."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " umuligheder i %lu kataloger.\n"
@@ -196,157 +196,157 @@ msgstr " umuligheder i %lu kataloger.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Rekursiv variabel '%s' refererer (i sidste ende) til sig selv"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "uafsluttet variabelreference"
 
-#: file.c:271
+#: file.c:278
 #, fuzzy, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Kommandoer blev angivet for filen '%s' i %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, fuzzy, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr "Kommandoer for filen '%s' blev fundet ved implicit regelsøgning,"
 
-#: file.c:280
+#: file.c:287
 #, fuzzy, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "men '%s' bliver nu anset som samme fil som '%s'."
 
-#: file.c:283
+#: file.c:290
 #, fuzzy, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "Kommandoer for '%s' vil blive ignoreret til fordel for de for '%s'."
 
-#: file.c:303
+#: file.c:310
 #, fuzzy, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "kan ikke ændre enkelt-kolon '%s' til dobbelt-kolon '%s'"
 
-#: file.c:309
+#: file.c:316
 #, fuzzy, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "kan ikke ændre dobbelt-kolon '%s' til enkelt-kolon '%s'"
 
-#: file.c:401
+#: file.c:408
 #, fuzzy, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Sletter mellemfil '%s'"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Sletter mellemfiler ...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Aktuel tid"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Tidsstempel i forkert område; bruger %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Ikke et mål:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Værdifuld fil (forudsætning for .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Falsk mål (forudsætning for .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Kommandolinjemål."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Et forvalg, MAKEFILES, eller -include/sinclude makefile."
 
-#: file.c:968
+#: file.c:975
 #, fuzzy
 msgid "#  Builtin rule"
 msgstr ""
 "\n"
 "# Ingen implicitte regler."
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Der er udført implicit regelsøgning."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Der er ikke udført implicit regelsøgning."
 
-#: file.c:973
+#: file.c:980
 #, fuzzy, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Implicit/statisk mønsterstamme: '%s'\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Filen er en mellemfil."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Skaber også:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Ændringstid ikke tjekket."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Filen findes ikke."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Filen er meget gammel."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Sidst ændret %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Filen er blevet opdateret."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Filen er ikke blevet opdateret."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Der køres kommandoer nu (DETTE ER EN FEJL)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Kommandoer for afhængigheder køres nu (DETTE ER EN FEJL)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Opdateret med godt resultat."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Behøver opdatering (-q er sat)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Opdatering mislykkedes."
 
-#: file.c:1025
+#: file.c:1032
 #, fuzzy
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Ugyldig værdi i 'command_state'-felt!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -354,7 +354,7 @@ msgstr ""
 "\n"
 "# Filer"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -364,107 +364,125 @@ msgstr ""
 "# Statistik for fil-hash-spande:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr ""
 
-#: function.c:780
+#: function.c:790
 #, fuzzy
 msgid "non-numeric first argument to 'word' function"
 msgstr "ikke-numerisk første argument til 'word'-funktionen"
 
-#: function.c:785
+#: function.c:795
 #, fuzzy
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "første argument til 'word'-functionen skal være større end 0"
 
-#: function.c:805
+#: function.c:815
 #, fuzzy
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "ikke-numerisk første argument til 'wordlist'-funktionen"
 
-#: function.c:807
+#: function.c:817
 #, fuzzy
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "ikke-numerisk andet argument til 'wordlist'-funktionen"
 
-#: function.c:1499
+#: function.c:1525
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe(): DuplicateHandle(In) mislykkedes (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_open_pipe(): DuplicateHandle(Err) mislykkedes (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() mislykkedes (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() mislykkedes\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Afrydder midlertidig batchfil %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, fuzzy, c-format
 msgid "open: %s: %s"
 msgstr "%s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, fuzzy, c-format
 msgid "write: %s: %s"
 msgstr "skrivefejl: %s"
 
-#: function.c:2209
-#, c-format
-msgid "Invalid file operation: %s"
+#: function.c:2230 function.c:2267
+#, fuzzy, c-format
+msgid "close: %s: %s"
+msgstr "%s%s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
 msgstr ""
 
-#: function.c:2324
+#: function.c:2262
+#, fuzzy, c-format
+msgid "read: %s: %s"
+msgstr "%s: %s"
+
+#: function.c:2275
+#, fuzzy, c-format
+msgid "file: invalid file operation: %s"
+msgstr "%s: ugyldigt tilvalg -- %c\n"
+
+#: function.c:2390
 #, fuzzy, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "utilstrækkeligt antal argumenter (%d) til funktionen '%s'"
 
-#: function.c:2336
+#: function.c:2402
 #, fuzzy, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "ikke implementeret på denne platform: funktion '%s'"
 
-#: function.c:2399
+#: function.c:2466
 #, fuzzy, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "uafsluttet kald til funktionen '%s'; manglende '%c'"
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
 msgstr ""
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
 msgstr ""
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
 msgstr ""
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
+msgid "Invalid minimum argument count (%u) for function %s"
 msgstr "utilstrækkeligt antal argumenter (%d) til funktionen '%s'"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
+msgid "Invalid maximum argument count (%u) for function %s"
 msgstr "utilstrækkeligt antal argumenter (%d) til funktionen '%s'"
 
 #: getopt.c:659
@@ -562,7 +580,7 @@ msgstr "Kigger efter en implicit regel for '%s'.\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Kigger efter en implicit arkivmedlemsregel for '%s'.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Undgår rekursion i implicitte regler.\n"
 
@@ -606,102 +624,78 @@ msgstr "Fandt forudsætning '%s' som VPATH '%s'\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Kigger efter en regel med mellemfil '%s'.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Kan ikke oprette midlertidig fil\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (core-fil efterladt)"
 
-#: job.c:488
+#: job.c:490
 #, fuzzy
 msgid " (ignored)"
 msgstr "[%s] Fejl %d (ignoreret)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 #, fuzzy
 msgid "<builtin>"
 msgstr " (indbyggede):"
 
-#: job.c:503
+#: job.c:510
 #, fuzzy, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "advarsel: tilsidesætter kommandoer for mål '%s'"
-
-#: job.c:516 job.c:524
-#, fuzzy, c-format
-msgid "%s[%s] Error %d%s"
+msgid "%s[%s: %s] Error %d%s"
 msgstr "*** [%s] Fejl %d"
 
-#: job.c:519
-#, fuzzy, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "*** [%s] Fejl 0x%x"
-
-#: job.c:529
-#, fuzzy, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s%s: %s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Venter på uafsluttede job...."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Levende underproces %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (eksternt)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Høster tabende underproces %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Høster vindende underproces %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Afrydder midlertidig jobfil %s\n"
 
-#: job.c:855
+#: job.c:845
 #, fuzzy, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Afrydder midlertidig jobfil %s\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Fjerner underproces %p PID %s%s fra kæde.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Frigav symbol for underproces %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "write jobserver"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() fejlede ved igangsætning af proces (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -710,99 +704,95 @@ msgstr ""
 "\n"
 "Talte %d argumenter i fejlet igangsætning\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Sætter underproces %p (%s) PID %s%s på kæden.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Fik symbol for underproces %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "read jobs pipe"
-
-#: job.c:2056
+#: job.c:1838
 #, fuzzy, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "touch: Arkivet '%s' findes ikke"
 
-#: job.c:2059
+#: job.c:1841
 #, fuzzy, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%sIngen regel til at skabe mål '%s' som behøves af '%s'%s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "kan ikke gennemtvinge belastningsgrænser på dette styrestystem"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "kan ikke gennemtvinge belastningsgrænse: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "ikke flere filhåndtag: Kunne ikke duplikere stdin\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "ikke flere filhåndtag: Kunne ikke duplikere stdout\n"
 
-#: job.c:2278
+#: job.c:2074
 #, fuzzy
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "ikke flere filhåndtag: Kunne ikke duplikere stdin\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Kunne ikke gendanne stdin\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Kunne ikke gendanne stdout\n"
 
-#: job.c:2309
+#: job.c:2105
 #, fuzzy
 msgid "Could not restore stderr\n"
 msgstr "Kunne ikke gendanne stdin\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "make høstede underproces med pid %s, venter endnu på pid %s\n"
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: Kommando ikke fundet"
+
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
 msgstr "%s: Kommando ikke fundet"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s; Skalprogram ikke fundet"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: miljøplads er måske opbrugt"
 
-#: job.c:2765
+#: job.c:2584
 #, fuzzy, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL ændret (var '%s', nu '%s')\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Opretter midlertidig jobfil %s\n"
 
-#: job.c:3206
+#: job.c:3030
 #, fuzzy
 msgid ""
 "Batch file contents:\n"
@@ -811,7 +801,7 @@ msgstr ""
 "Indhold af batchfil:%s\n"
 "\t%s\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -820,7 +810,7 @@ msgstr ""
 "Indhold af batchfil:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (linje %d) Forkert skal-kontekst (!unixy && !batch_mode_shell)\n"
@@ -849,29 +839,29 @@ msgstr ""
 msgid "Empty symbol name for load: %s"
 msgstr ""
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr ""
 
-#: load.c:244
+#: load.c:256
 #, fuzzy
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Parallelle job (-j) er ikke understøttet på denne platform."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Tilvalg:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Ignoreret af hensyn til kompabilitet.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make           Skab alle mål betingelsesløst.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -879,19 +869,19 @@ msgstr ""
 "  -C KATALOG, --directory=KATALOG\n"
 "                              Skift allerførst til KATALOG.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr ""
 "  -d                          Udskriv en masse fejlsøgningsinformation.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=FLAG]              Udskriv forskellige slags "
 "fejlsøgningsinformation.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -899,13 +889,13 @@ msgstr ""
 "  -e, --environment-overrides\n"
 "                              Miljøvariable har forrang for makefiler.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "  --eval=STRENG               Evaluér STRENG som en makefil-erklæring.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -913,15 +903,15 @@ msgstr ""
 "  -f FIL, --file=FIL, --makefile=FIL\n"
 "                              Læs FIL som en makefil.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Udskriv denne besked og afslut.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr "  -i, --ignore-errors         Ignorér fejl fra kommandoer.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -929,7 +919,7 @@ msgstr ""
 "  -I KATALOG, --include-dir=KATALOG\n"
 "                              Søg i KATALOG efter inkluderede makefiler.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -937,13 +927,13 @@ msgstr ""
 "  -j [N], --jobs[=N]          Tillad N samtidige job; uendelig mange job "
 "uden argument.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Fortsæt selvom nogen mål ikke kan skabes.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -953,7 +943,7 @@ msgstr ""
 "                              Start ikke flere job medmindre belastningen er "
 "under N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -961,7 +951,7 @@ msgstr ""
 "  -L, --check-symlink-times   Brug sidste mtime mellem symbolske lænker og "
 "mål.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -971,7 +961,7 @@ msgstr ""
 "                              Udfør ikke nogen kommandoer; udskriv dem "
 "bare.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -981,17 +971,17 @@ msgstr ""
 "                              Anse FIL som værende meget gammel og genskab "
 "den ikke.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       Udskriv makes interne database.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1000,20 +990,20 @@ msgstr ""
 "angiver\n"
 "                                om målet er tidssvarende.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Slå de indbyggede implicitte regler fra.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr "  -R, --no-builtin-variables  Slå de indbyggede variabelværdier fra.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Udskriv ikke kommandoer.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1021,27 +1011,27 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Slår -k fra.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Berør mål i stedet for at genskabe dem.\n"
 
-#: main.c:373
+#: main.c:398
 #, fuzzy
 msgid "  --trace                     Print tracing information.\n"
 msgstr ""
 "  -d                          Udskriv en masse fejlsøgningsinformation.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr "  -v, --version               Udskriv makes versionnummer og afslut.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Udskriv det aktuelle katalog.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1049,7 +1039,7 @@ msgstr ""
 "  --no-print-directory        Slå -w fra, selv hvis det var slået til "
 "automatisk.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1057,33 +1047,33 @@ msgstr ""
 "  -W FIL, --what-if=FIL, --new-file=FIL, --assume-new=FIL\n"
 "                              Anse FIL som værende nyskabt.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
 msgstr ""
 "  --warn-undefined-variables  Advar når en udefineret variabel bruges.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "en tom streng er ugyldig som filnavn"
 
-#: main.c:737
+#: main.c:766
 #, fuzzy, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "ukendt fejlsøgningsniveau-specifikation '%s'"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr ""
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: Afbrydelse/undtagelse fanget (kode = 0x%lx, addr = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1098,68 +1088,37 @@ msgstr ""
 "ExceptionFlags = %lx\n"
 "ExceptionAddress = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Adgangskrænkelse: skriveoperation på adresse 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Adgangskrænkelse: læseoperation på adresse 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() sætter default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "find_and_set_shell()-stisøgning sætter default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s er standset i 30 sekunder..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "udført sleep(30). Fortsætter.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-
-# fd = fildeskriptor
-#: main.c:1530
-#, fuzzy, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Jobserverklient (fd'er %d,%d)\n"
-
-#: main.c:1534
-#, fuzzy, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "intern fejl: ugyldig '--jobserver-fds'-streng '%s'"
-
-# fd = fildeskriptor
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Jobserverklient (fd'er %d,%d)\n"
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr "advarsel: tvunget -jN i undermake: slår jobserver tilstand fra."
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "dup jobserver"
-
-#: main.c:1570
+#: main.c:1627
 #, fuzzy
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
@@ -1167,112 +1126,97 @@ msgstr ""
 "advarsel: jobserver ikke tilgængelig: bruger -j1. Tilføj '+' til "
 "ophavsmakeregel."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr "advarsel: tvunget -jN i undermake: slår jobserver tilstand fra."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefil fra standard-ind er angivet to gange."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (midlertidig fil)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (midlertidig fil)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Parallelle job (-j) er ikke understøttet på denne platform."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Sætter tilbage til enkelt job-tilstand (-j1)."
 
-# fd = fildeskriptor
-#: main.c:1994
-#, fuzzy, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Jobserverklient (fd'er %d,%d)\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "oprettelse af jobledning"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "klargøring af jobserver-ledning"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Symbolske lænker understøttes ikke: Deaktiverer -L."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Opdaterer makefiler....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, fuzzy, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "Makefilen '%s' får måske make til at gå i ring; genskaber den ikke.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, fuzzy, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Genskabelse af makefilen '%s' mislykkedes."
 
-#: main.c:2257
+#: main.c:2303
 #, fuzzy, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Inkluderet makefil '%s' blev ikke fundet."
 
-#: main.c:2262
+#: main.c:2308
 #, fuzzy, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Makefil '%s' blev ikke fundet."
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Kunne ikke skifte tilbage til det originale katalog."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Udfører igen[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (midlertidig fil): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL indeholder mere end et mål"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Ingen angivne mål og ingen makefil fundet"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Ingen mål"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Opdaterer endemål....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr "advarsel: Fejl i urets tid opdaget. Din bygning kan være ukomplet."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Brug: %s [tilvalg] [mål] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1281,7 +1225,7 @@ msgstr ""
 "\n"
 "Dette program er bygget til %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1290,32 +1234,32 @@ msgstr ""
 "\n"
 "Dette program er bygget til %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Send fejlmeldinger (på engelsk) til <bug-make@gnu.org>.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, fuzzy, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "'-%s%s'-tilvalget kræver et strengargument, der ikke er tomt"
 
-#: main.c:2871
+#: main.c:2933
 #, fuzzy, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "'-%c'-tilvalget kræver et positivt heltalligt argument"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sBygget til %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sBygget til %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1328,7 +1272,7 @@ msgstr ""
 "%sDer gives INGEN GARANTI i den grad, som dette tillades af loven.\n"
 
 # %s giver dato og klokkeslæt
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1338,7 +1282,7 @@ msgstr ""
 "# Makedatabase, udskrevet %s"
 
 # %s giver dato og klokkeslæt
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1347,29 +1291,29 @@ msgstr ""
 "\n"
 "# Afsluttet makedatabase %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Ukendt fejl %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: bruger %lu (reelt %lu), gruppe %lu (reelt %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Indledende adgang"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Brugeradgang"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Make-adgang"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Barneadgang"
 
@@ -1432,230 +1376,272 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "oprettelse af jobledning"
+
+#: posixos.c:72 posixos.c:227
+#, fuzzy
+msgid "duping jobs pipe"
+msgstr "oprettelse af jobledning"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "klargøring af jobserver-ledning"
+
+#: posixos.c:90
+#, fuzzy, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "intern fejl: ugyldig '--jobserver-fds'-streng '%s'"
+
+# fd = fildeskriptor
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Jobserverklient (fd'er %d,%d)\n"
+
+#: posixos.c:109
+#, fuzzy
+msgid "jobserver pipeline"
+msgstr "klargøring af jobserver-ledning"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "write jobserver"
+
+#: posixos.c:268
+#, fuzzy
+msgid "pselect jobs pipe"
+msgstr "read jobs pipe"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "read jobs pipe"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Læser makefiler...\n"
 
-#: read.c:335
+#: read.c:329
 #, fuzzy, c-format
 msgid "Reading makefile '%s'"
 msgstr "Læser makefil '%s'"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (ingen standard-endemål)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (søgesti)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (ikke nødvendig)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (ingen ~-udfoldning)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr ""
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr ""
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "ugyldig syntaks i betingelse"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr ""
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "kommandoer begynder før første mål"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "manglende regel før kommandoer"
 
-#: read.c:1131
+#: read.c:1124
 #, fuzzy
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr " (mente du TAB i stedet for 8 mellemrum?)"
 
-#: read.c:1133
+#: read.c:1126
 #, fuzzy
 msgid "missing separator"
 msgstr "manglende adskiller%s"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "manglende målmønster"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "flere målmønstre"
 
-#: read.c:1276
+#: read.c:1268
 #, fuzzy, c-format
 msgid "target pattern contains no '%%'"
 msgstr "målmønster indeholder ingen '%%'"
 
-#: read.c:1398
+#: read.c:1390
 #, fuzzy
 msgid "missing 'endif'"
 msgstr "manglende 'endif'"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "tomt variabelnavn"
 
-#: read.c:1471
+#: read.c:1463
 #, fuzzy
 msgid "extraneous text after 'define' directive"
 msgstr "overskydende tekst efter 'define'-direktiv"
 
-#: read.c:1496
+#: read.c:1488
 #, fuzzy
 msgid "missing 'endef', unterminated 'define'"
 msgstr "manglende 'endef', uafsluttet 'define'"
 
-#: read.c:1524
+#: read.c:1516
 #, fuzzy
 msgid "extraneous text after 'endef' directive"
 msgstr "overskydende tekst efter 'endef'-direktiv"
 
-#: read.c:1595
+#: read.c:1588
 #, fuzzy, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "Overskydende tekst efter '%s'-direktiv"
 
-#: read.c:1596
+#: read.c:1589
 #, fuzzy, c-format
 msgid "extraneous '%s'"
 msgstr "fremmed '%s'"
 
-#: read.c:1624
+#: read.c:1617
 #, fuzzy
 msgid "only one 'else' per conditional"
 msgstr "kun én 'else' per betingelse"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Misdannet målspecifik variabeldefinition"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "der kan ikke defineres forudsætninger i kommandoer"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "blandede implicitte og statiske mønsterregler"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "blandede implicitte og normale regler"
 
-#: read.c:2091
+#: read.c:2085
 #, fuzzy, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "mål '%s' passer ikke til målmønstret"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, fuzzy, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "målfil '%s' har både :- og ::-angivelser"
 
-#: read.c:2112
+#: read.c:2106
 #, fuzzy, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "target '%s' optræder mere end én gang i samme regel."
 
-#: read.c:2122
+#: read.c:2116
 #, fuzzy, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "advarsel: tilsidesætter kommandoer for mål '%s'"
 
-#: read.c:2125
+#: read.c:2119
 #, fuzzy, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "advarsel: ignorerer gamle kommandoer for mål '%s'"
 
-#: read.c:2229
+#: read.c:2223
 #, fuzzy
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr "blandede implicitte og normale regler"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "advarsel: NUL-tegn set; resten af linjen ignoreres"
 
-#: remake.c:230
+#: remake.c:225
 #, fuzzy, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Ingenting at gøre for '%s'."
 
-#: remake.c:231
+#: remake.c:226
 #, fuzzy, c-format
 msgid "'%s' is up to date."
 msgstr "'%s' er tidssvarende."
 
-#: remake.c:303
+#: remake.c:322
 #, fuzzy, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Beskærer fil '%s'.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%sIngen regel til at skabe mål '%s' som behøves af '%s'%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sIngen regel til at skabe mål '%s'%s"
 
-#: remake.c:426
+#: remake.c:441
 #, fuzzy, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Overvejer målfil '%s'.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, fuzzy, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Opdatering af fil '%s' er forgæves prøvet for nylig.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, fuzzy, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Fil '%s' er allerede overvejet.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, fuzzy, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Opdaterer stadig fil '%s'.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, fuzzy, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Opdatering af fil '%s' afsluttet.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, fuzzy, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Filen '%s' findes ikke.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, fuzzy, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1663,137 +1649,137 @@ msgstr ""
 "*** Advarsel: .LOW_RESOLUTION_TIME-fil '%s' har et tidsstempel med høj "
 "opløsning"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, fuzzy, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Fandt en implicit regel for '%s'.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, fuzzy, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Ingen implicit regel for '%s' fundet.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, fuzzy, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Bruger standardkommandoer for '%s'.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Cirkulær %s <- %s afhængighed opgivet."
 
-#: remake.c:675
+#: remake.c:690
 #, fuzzy, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Afsluttet forudsætningerne for målfil '%s'.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, fuzzy, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Forudsætningerne for '%s' er ved at blive skabt.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, fuzzy, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Opgiver målfil '%s'.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, fuzzy, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Målet '%s' ikke genskabt på grund af fejl."
 
-#: remake.c:752
+#: remake.c:767
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Forudsætningen '%s' angiver kun rækkefølgen ift. målet '%s'.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, fuzzy, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Forudsætningen '%s' for målet '%s' findes ikke.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Forudsætningen '%s' er nyere end målet '%s'.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Forudsætningen '%s' er ældre end målet '%s'.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, fuzzy, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "Målet '%s' er med dobbelt-kolon og har ingen forudsætninger.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, fuzzy, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "Ingen kommandoer til '%s', og ingen forudsætninger har ændret sig.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, fuzzy, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Skaber '%s' pga. \"always-make\"-flag.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, fuzzy, c-format
 msgid "No need to remake target '%s'"
 msgstr "Ingen grund til at genskabe målet '%s'"
 
-#: remake.c:805
+#: remake.c:820
 #, fuzzy, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; bruger VPATH-navnet '%s'"
 
-#: remake.c:825
+#: remake.c:840
 #, fuzzy, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Skal genskabe målet '%s'.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, fuzzy, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr " Ignorerer VPATH-navnet '%s'.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, fuzzy, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Kommandoerne for '%s' er ved at blive kørt.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, fuzzy, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Genskabelse af målfil '%s' mislykkedes.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, fuzzy, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Målfil '%s' genskabt.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, fuzzy, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Med -q trænger målfilen '%s' til at blive genskabt.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, fuzzy, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Bruger standardkommandoer for '%s'.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Advarsel: Ændringstiden for filen '%s' er i fremtiden"
 
-#: remake.c:1411
+#: remake.c:1443
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Advarsel: Filen '%s' har ændringstidspunkt %s s i fremtiden"
 
-#: remake.c:1610
+#: remake.c:1646
 #, fuzzy, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ".LIBPATTERNS-element '%s' er ikke et mønster"
@@ -1806,7 +1792,7 @@ msgstr ".LIBPATTERNS-element '%s' er ikke et mønster"
 msgid "Customs won't export: %s\n"
 msgstr "Customs kan ikke eksporteres: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1814,7 +1800,7 @@ msgstr ""
 "\n"
 "# Implicitte regler."
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1822,7 +1808,7 @@ msgstr ""
 "\n"
 "# Ingen implicitte regler."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1831,11 +1817,11 @@ msgstr ""
 "\n"
 "# %u implicitte regler, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminale."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "FEJL: forkert num_pattern_rules!  %u != %u"
@@ -1998,14 +1984,14 @@ msgstr "Informationsforespørgsel"
 msgid "Floating point co-processor not available"
 msgstr "Flydendetalshjælpeprocessor ikke tilgængelig"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
 msgstr ""
 
-#: strcache.c:266
+#: strcache.c:304
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2014,25 +2000,25 @@ msgid ""
 msgstr ""
 "%s strcache brugt: total = %d (%d) / maks = %d / min = %d / gnmsn = %d\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:280
+#: strcache.c:319
 #, fuzzy, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr ""
 "%s strcache brugt: total = %d (%d) / maks = %d / min = %d / gnmsn = %d\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, fuzzy, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr "%s strcache fri: total = %d (%d) / maks = %d / min = %d / gnmsn = %d\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2041,7 +2027,7 @@ msgstr ""
 "\n"
 "%s # strenge i strcache: %d / opslag = %lu / fundne = %lu\n"
 
-#: strcache.c:289
+#: strcache.c:328
 #, fuzzy
 msgid ""
 "# hash-table stats:\n"
@@ -2051,45 +2037,45 @@ msgstr ""
 "# Statistik for fil-hash-spande:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automatisk"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "forvalgt"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "miljø"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefil"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "miljø med -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "kommandolinje"
 
-#: variable.c:1617
+#: variable.c:1647
 #, fuzzy
 msgid "'override' directive"
 msgstr "'override'-direktiv"
 
-#: variable.c:1628
+#: variable.c:1658
 #, fuzzy, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (fra '%s', linje %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# Statistik for variabelsæt-hash-spande:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2097,7 +2083,7 @@ msgstr ""
 "\n"
 "# Variabler\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2105,7 +2091,7 @@ msgstr ""
 "\n"
 "# Mønsterspecifikke variabelværdier"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2113,7 +2099,7 @@ msgstr ""
 "\n"
 "# Ingen mønsterspecifikke variabelværdier."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2132,88 +2118,38 @@ msgstr "advarsel: udefineret vaiabel '%.*s'"
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() mislykkedes med %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Advarsel: Tom omdirigering\n"
-
-#: vmsjobs.c:183
-#, fuzzy, c-format
-msgid "internal error: '%s' command_state"
-msgstr "intern fejl: '%s' command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 "-advarsel, du kan blive nødt til at genetablere CTRL-Y-behandling fra DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "BUILTIN [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "BUILTIN CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "BUILTIN CD %s\n"
-
-#: vmsjobs.c:505
+#: vmsjobs.c:1228
 #, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Ukendt indbygget kommando '%s'\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Fejl, tom kommando\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Omdirigeret inddata from %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Omdirigeret fejl to %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Tilføj uddata til slutningen af %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Omdirigeret uddata til %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Tilføj %.*s og ryd op\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Udfører i stedet %s\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Fejl ved spawn, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2221,12 +2157,12 @@ msgstr ""
 "\n"
 "# VPATH-søgestier\n"
 
-#: vpath.c:600
+#: vpath.c:620
 #, fuzzy
 msgid "# No 'vpath' search paths."
 msgstr "# Ingen 'vpath'-søgestier."
 
-#: vpath.c:602
+#: vpath.c:622
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2235,7 +2171,7 @@ msgstr ""
 "\n"
 "# %u 'vpath'-søgestier.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 #, fuzzy
 msgid ""
 "\n"
@@ -2244,7 +2180,7 @@ msgstr ""
 "\n"
 "# Ingen generel ('VPATH'-variabel) søgesti."
 
-#: vpath.c:611
+#: vpath.c:631
 #, fuzzy
 msgid ""
 "\n"
@@ -2255,12 +2191,48 @@ msgstr ""
 "# Generel ('VPATH'-variabel) søgesti:\n"
 "# "
 
+# fd = fildeskriptor
+#: w32/w32os.c:46
+#, fuzzy, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Jobserverklient (fd'er %d,%d)\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+
+# fd = fildeskriptor
+#: w32/w32os.c:84
+#, fuzzy, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Jobserverklient (fd'er %d,%d)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr ""
+
 #~ msgid "#  Invalid value in `update_status' member!"
 #~ msgstr "#  Ugyldig værdi i 'update_status'-felt!"
 
 #~ msgid "*** [%s] Error 0x%x (ignored)"
 #~ msgstr "*** [%s] Fejl 0x%x (ignoreret)"
 
+#~ msgid "*** [%s] Error 0x%x"
+#~ msgstr "*** [%s] Fejl 0x%x"
+
 #~ msgid "Invoking recipe from %s:%lu to update target `%s'.\n"
 #~ msgstr "Kører kommandoer fra %s:%lu for at opdatere målet '%s'.\n"
 
@@ -2270,6 +2242,9 @@ msgstr ""
 #~ msgid "internal error: multiple --jobserver-fds options"
 #~ msgstr "intern fejl: flere '--jobserver-fds'-tilvalg"
 
+#~ msgid "dup jobserver"
+#~ msgstr "dup jobserver"
+
 #~ msgid "virtual memory exhausted"
 #~ msgstr "virtuel hukommelse opbrugt"
 
@@ -2288,9 +2263,36 @@ msgstr ""
 #~ "# statistik for strcache-hashtabeller:\n"
 #~ "# "
 
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Advarsel: Tom omdirigering\n"
+
+#~ msgid "internal error: `%s' command_state"
+#~ msgstr "intern fejl: '%s' command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "BUILTIN [%s][%s]\n"
+
 #~ msgid "BUILTIN RM %s\n"
 #~ msgstr "BUILTIN RM %s\n"
 
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Ukendt indbygget kommando '%s'\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Fejl, tom kommando\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Omdirigeret inddata from %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Omdirigeret fejl to %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Omdirigeret uddata til %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Fejl ved spawn, %d\n"
+
 #~ msgid "Syntax error, still inside '\"'\n"
 #~ msgstr "Syntaksfejl, stadig inden i '\"'\n"
 
index d3250e2..0559096 100644 (file)
Binary files a/po/de.gmo and b/po/de.gmo differ
index 1e3b1b3..f023d50 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -1,7 +1,7 @@
 # German message translation file for GNU make
-# Copyright © 1996, 1997, 2002, 2013 Free Software Foundation, Inc.
+# Copyright © 1996, 1997, 2002, 2013, 2016 Free Software Foundation, Inc.
 # This file is distributed under the same license as the make package.
-# Philipp Thomas <pth@suse.de> 2013
+# Philipp Thomas <pth@suse.de> 2013, 2016
 # Karl Eichwalder <ke@suse.de>, 2002, 2005.
 # Alexander Mader  <aumader@gmx.net>, 2000.
 # Alexander Mader  <mader@wias-berlin.de>, 1997.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: make 4.0\n"
+"Project-Id-Version: make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-10-11 12:22+0200\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-25 09:47+0200\n"
 "Last-Translator: Philipp Thomas <pth@suse.de>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
@@ -58,87 +58,87 @@ msgstr ""
 "touch: Ungültiger Rückgabewert beim Zugriff \n"
 "von ar_member_touch auf „%s“"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr "„lbr$set_module()“ konnte keine Modulinformation auslesen; Status = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "„lbr$ini_control()“ scheiterte mit Status = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr ""
-"Konnte die Bibliothek „%s“ nicht öffnen um nach Eintrag\n"
-"„%s“ zu suchen"
+"Die Bibliothek „%s“ konnte nicht geöffnet werden um nach Eintragsstatus %d "
+"zu suchen"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr ""
 "Eintrag „%s“ %s: \n"
 "%ld Bytes an Position %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (der Name ist möglicherweise abgeschnitten)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Datum %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  Nutzer-ID = %d, Gruppen-ID = %d, Modus = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "Die Regel hat zu viele Zeilen (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Abbruch.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Archiveintrag „%s“ ist möglicherweise falsch; nicht gelöscht"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Archiveintrag „%s“ ist möglicherweise falsch; nicht gelöscht"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Datei „%s“ wird gelöscht"
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Datei „%s“ wird gelöscht"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  Auszuführende Regel"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (eingebaut):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (aus „%s“, Zeile %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -146,68 +146,68 @@ msgstr ""
 "\n"
 "# Verzeichnisse\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: Status konnte nicht festgestellt werden.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr ""
 "# %s ( Schlüssel (key) %s,  letzte Änderung (mtime) %d): \n"
 "Konnte nicht geöffnet werden.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr ""
 "# %s (Gerät %d, Inode [%d,%d,%d]): \n"
 "Konnte nicht geöffnet werden.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr ""
 "# %s (Gerät %ld, Inode %ld): \n"
 "Konnte nicht geöffnet werden.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (Schlüssel (key) %s,  letzte Änderung (mtime) %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (Gerät %d, Inode [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (Gerät %ld, Inode %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Keine"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " Dateien, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "keine"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " Unmöglichkeiten"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " bisher."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " Unmöglichkeiten in %lu Verzeichnissen.\n"
@@ -217,163 +217,163 @@ msgstr " Unmöglichkeiten in %lu Verzeichnissen.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Rekursive Variable „%s“ referenziert sich (schließlich) selbst"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "Nicht abgeschlossene Variablenreferenz"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Die Regel für die Datei „%s“ wurde in %s angegeben:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ""
 "Die Regel für die Datei „%s“ wurden aufgrund \n"
 "der Suche nach impliziten Regeln gefunden,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr ""
 "aber „%s“ wird jetzt als dieselbe Datei \n"
 "wie „%s“ betrachtet."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ""
 "Die Regel für „%s“ wird ignoriert, \n"
 "die für „%s“ wird bevorzugt."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 "„%s“ mit einfachem Doppelpunkt kann nicht in \n"
 "„%s“ mit doppeltem Doppelpunkt geändert werden"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr ""
 "„%s“ mit doppeltem Doppelpunkt kann nicht in \n"
 "„%s“ mit einfachem Doppelpunkt geändert werden"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Löschen der übergangsweise angelegten Datei „%s“"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Die übergangsweise angelegte Datei „%s“ wird gelöscht...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Aktuelle Zeit"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Zeitstempel außerhalb des Gültigkeitsbereichs; %s wird ersetzt"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Dies ist kein Ziel:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Wertvolle Datei (benötigt von .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Vorgetäuschtes Ziel (benötigt von .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Kommandozeilen-Ziel (target)."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Eine standardmässige, MAKEFILES oder -include/sinclude Makedatei."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "# Eingebaute Regel"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Die Suche nach impliziten Regeln wurde durchgeführt."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Die Suche nach impliziten Regeln wurde nicht durchgeführt."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Wurzel impliziter/statischer Muster: „%s“\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Datei ist ein Zwischenschritt in den Abhängigkeiten."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Erzeugt außerdem:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Zeit der letzten Änderung wurde nicht überprüft."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Die Datei existiert nicht."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Datei ist sehr alt."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Zuletzt geändert %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Datei wurde aktualisiert."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Datei wurde nicht aktualisiert."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Derzeit laufende Regel (DAS IST EIN FEHLER)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Derzeit läuft die Regel für Abhängigkeiten (DAS IST EIN FEHLER)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Erfolgreich aktualisiert."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Eine Aktualisierung ist notwendig (-q ist angegeben)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Aktualisierung ist fehlgeschlagen."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Ungültiger Wert im „command_state“-Strukturelement!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -381,7 +381,7 @@ msgstr ""
 "\n"
 "# Dateien"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -391,105 +391,122 @@ msgstr ""
 "# Statistik der Hash-Tabelle für Dateien:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: Feld „%s“ wird nicht zwischengespeichert: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "Nicht-numerisches erstes Argument für die „word“-Funktion"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "Das erste Argument für  die „word“-Funktion muss größer als 0 sein"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "Nicht-numerisches erstes Argument für die „wordlist“-Funktion"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "Nicht-numerisches zweites Argument zur „wordlist“-Funktion"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "„windows32_openpipe“: „DuplicateHandle(In)“ schlug fehl (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "„cwindows32_openpipe“: „DuplicateHandle(Err)“ schlug fehl (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "„CreatePipe()“ schlug fehl (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() schlug fehl\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Die temporäre Stapelverarbeitungsdatei %s wird gelöscht\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "Datei: fehlender Dateiname"
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "Öffnen: %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "Schreiben: %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
+#, c-format
+msgid "close: %s: %s"
+msgstr "schließend: %s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "Datei: zu viele Argumente"
+
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr "Lesen: %s: %s"
+
+#: function.c:2275
 #, c-format
-msgid "Invalid file operation: %s"
+msgid "file: invalid file operation: %s"
 msgstr "Unzulässige Dateioperation: %s"
 
-#: function.c:2324
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "Zuwenig Argumente (%d) für die Funktion „%s“"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "Auf dieser Rechnerkonfiguration nicht implementiert: Funktion „%s“"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "Nicht beendeter Aufruf der Funktion „%s“: „%c“ fehlt"
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "Leere Funktionsname\n"
+msgstr "Leerer Funktionsname"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "Unzulässiger Funktionsname: %s\n"
+msgstr "Unzulässiger Funktionsname: %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "Funktionsname is zu lang: %s\n"
+msgstr "Der Funktionsname ist zu lang: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "Ungültige minimale Anzahl von Argumenten (%d) für die Funktion „%s“\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "Ungültige minimale Anzahl von Argumenten (%d) für die Funktion „%s“"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "Ungülte maximale Anzahl an Argumenten (%d) für die Funktion „%s“\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "Ungülte maximale Anzahl an Argumenten (%d) für die Funktion „%s“"
 
 #: getopt.c:659
 #, c-format
@@ -589,7 +606,7 @@ msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr ""
 "Es wird nach einer impliziten Regel für Archiveinträge für „%s“ gesucht.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Rekursion in den impliziten Regeln wird vermieden.\n"
 
@@ -635,100 +652,76 @@ msgstr ""
 "Es wird nach einer Regel mit der übergangsweise verwendeten Datei „%s“ "
 "gesucht.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Eine temporäre Datei kann nicht erzeugt werden\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (Speicherauszug erstellt)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (ignoriert)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<eingebaut>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: die Regel für Ziel „%s“ scheiterte"
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "%s[%s] Fehler %d%s"
-
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Fehler 0x%x%s"
-
-#: job.c:529
+#: job.c:510
 #, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] Fehler %d%s"
 
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
-msgstr "*** Es wird auf noch nicht beendete Prozesse gewartet..."
+msgstr "*** Es wird auf noch nicht beendete Prozesse gewartet...."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Aktiver Kindprozess %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (entfernt)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Sammle erfolglosen Kindprozess %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Sammle erfolgreichen Kindprozess %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Lösche temporäre Stapelverarbeitungsdatei „%s“\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Löschen der temporären Stapelverarbeitungsdatei „%s“ scheiterte (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Entferne Kindprozess %p PID %s%s aus der Kette.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "Freigabe der Jobserver-Semaphore: (Fehler %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Token des Kindprozesses %p PID (%s) freigegeben.\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "Job-Server wird geschrieben"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "„process_easy()“ konnte den Prozess nicht starten (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -737,107 +730,103 @@ msgstr ""
 "\n"
 "%d Argumente gehörten zum fehlgeschlagenen Prozessstart\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Nehme Kindprozess %p (%s) PID %s%s in die Kette auf.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "warten auf Semaphore oder Kindprozess: (Fehler %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Token für den Kindprozess %p (%s) erhalten.\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "Lese Pipe für die Jobs"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: Archiv „%s“ existiert nicht"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: Ziel „%s“ wird aktualisiert wegen: %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr ""
 "Auf diesem Betriebssystem kann die Einhaltung\n"
 "der Lastbeschränkung nicht erzwungen werden"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "Lasteinschränkung kann nicht erzwungen werden: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
 "Keine weiteren Dateireferenzen verfügbar: die Standardeingabe konnte\n"
 "nicht dupliziert werden\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
 "Keine weiteren Dateireferenzen verfügbar: die Standardausgabe konnte\n"
 "nicht dupliziert werden\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
 "Keine weiteren Dateireferenzen verfügbar: Standardfehler konnte\n"
 "nicht dupliziert werden\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Die Standardeingabe konnte nicht wieder hergestellt werden\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Die Standardausgabe konnte nicht wieder hergestellt werden\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "Standardfehler konnte nicht wieder hergestellt werden\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr ""
 "„make“ registrierte die Beendigung des Kindprozesses mit ID %s,\n"
 "wartet jedoch noch auf den Prozess mit ID %s.\n"
 
-#: job.c:2458
+#: job.c:2275
+#, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: Kommando nicht gefunden\n"
+
+#: job.c:2277
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: Kommando nicht gefunden"
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: Befehl nicht gefunden\n"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Shell-Programm wurde nicht gefunden"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: der Platz in der Programmumgebung könnte erschöpft sein"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL gewechselt (war „%s“, ist jetzt „%s“)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Temporäre Stapelverarbeitungsdatei %s wird erstellt\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -845,7 +834,7 @@ msgstr ""
 "Inhalt der Stapelverarbeitungsdatei:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -854,7 +843,7 @@ msgstr ""
 "Inhalt der Stapelverarbeitungsdatei:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (Zeile %d) Falscher Shell-Kontext (!unixy && !batch_mode_shell)\n"
@@ -884,29 +873,29 @@ msgstr "Symbol %s konnte nicht aus %s geladen werden: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "Zu ladedender Symbolname ist leer: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Symbol %s wird aus %s geladen\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Die Operation „load“ wird auf dieser Plattform nicht unterstützt."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Optionen:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr ""
 "  -b, -m                      Wird aus Kompatibilitätsgründen ignoriert\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make           Alle Ziele ohne Bedingungen erstellen\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -915,19 +904,19 @@ msgstr ""
 "                              In VERZEICHNIS wechseln, bevor etwas getan "
 "wird\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr ""
 "  -d                          Viele Informationen zur Fehlersuche ausgeben.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=KENNUNGEN]         Verschiedene Arten von Debug-Information "
 "ausgeben\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -936,14 +925,14 @@ msgstr ""
 "                              Umgebungsvariablen überschreiben „make“-"
 "Steuerdateien\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "  --eval=ZEIENKETTE           ZEICHENKETTE wie einen Makedatei-Eintrag "
 "auswerten.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -951,15 +940,15 @@ msgstr ""
 "  -f DATEI, --file=DATEI, --makefile=DATEI\n"
 "                              DATEI als Makefile lesen\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Diese Meldung ausgeben und beenden\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr "  -i, --ignore-errors         Fehler in Regeln werden irgnoriert\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -968,7 +957,7 @@ msgstr ""
 "                              VERZEICHNIS nach eingebundenen\n"
 "                              Makedateien durchsuchen\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -977,14 +966,14 @@ msgstr ""
 "Anzahl \n"
 "                              von Jobs ohne Argument\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Weiterlaufen, auch wenn einige Targets nicht\n"
 "                              erzeugt werden konnten\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -994,7 +983,7 @@ msgstr ""
 "                              Keine Jobs starten bevor die Auslastung nicht "
 "unter N ist.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -1003,7 +992,7 @@ msgstr ""
 "                              symbolischer Verküpfung und dem Ziel "
 "verwenden.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -1012,7 +1001,7 @@ msgstr ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Keine Regel ausführen, nur ausgeben.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -1022,7 +1011,7 @@ msgstr ""
 "                              DATEI als sehr alt ansehen und nicht neu "
 "erzeugen.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -1031,12 +1020,12 @@ msgstr ""
 "                              Synchronisiert die Ausgabe paralleler Jobs per "
 "TYP.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr ""
 "  -p, --print-data-base       Die interne Datenbank von „make“ ausgeben\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1045,23 +1034,23 @@ msgstr ""
 "an, ob die Dateien\n"
 "                              aktuell sind\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Die eingebauten impliziten Regeln "
 "deaktivieren.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables  Die eingebauten Variablenbelegungen "
 "deaktivieren.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Regeln nicht ausgeben.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1069,30 +1058,30 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              -k abschalten.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Die Ziele werden nur als aktualisiert "
 "markiert,\n"
 "                              nicht tatsächlich erneuert\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr ""
 "  --trace                     Viele Informationen zur Fehlersuche ausgeben\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 "  -v, --version               Die Versionsnummer von „make“ ausgeben und "
 "Programm beenden\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Das aktuelle Verzeichnis ausgeben\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1100,7 +1089,7 @@ msgstr ""
 "  --no-print-directory        -w abschalten, selbst wenn es implizit "
 "eingeschaltet wurde.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1108,7 +1097,7 @@ msgstr ""
 "  -W DATEI, --what-if=DATEI, --new-file=DATEI, --assume-new=DATEI\n"
 "                              DATEI als unendlich neu erachten.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1116,27 +1105,27 @@ msgstr ""
 "  --warn-undefined-variables  Eine Warnung ausgeben, wenn eine undefinierte\n"
 "                                     Variable referenziert wird.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "Eine leere Zeichenkette ist als Dateiname ungültig"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "Unbekannte Debug-Level angegeben „%s“"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "unbekannter Typ von Ausgabesynchronisierung „%s“"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr ""
 "%s: bekam Unterbrechung/Ausnahme signalisiert (Kode = 0x%lx, Adr = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1152,190 +1141,144 @@ msgstr ""
 "ExceptionFlags = %lx\n"
 "ExceptionAddress = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Zugriffsverletzung: Schreiboperation an Adresse 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Zugriffsverletzung: Leseoperation an Adresse 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell setzt default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "find_and_set_shell Suche im Pfad setzte default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s setzt für 30 Sekunden aus..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "„sleep(30)“ ist abgeschlossen. Es geht weiter.\n"
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
-"interner Fehler: die Semaphore „%s“ des Jobservers kann nicht geöffnet "
-"werden:\n"
-"                 (Fehler %ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Jobserver-Klient (Semaphore %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "Interner Fehler: Falsche --jobserver-fds Angabe „%s“"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Jobserver-Klient (fds %d,%d)\n"
+"Warnung: Kein Jobserver verfügbar: -j1 wird gesetzt. Fügen Sie der "
+"Ursprungsregel\n"
+"„+“ hinzu."
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
 "Warnung: -jN in „make“-Verarbeitungszweig erzwungen: \n"
 "Jobserver-Modus nicht verfügbar."
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "Jobserver verdoppelt"
-
-#: main.c:1570
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-"Warnung: Kein Jobserver verfügbar: -j1 wird gesetzt. Fügen Sie der "
-"Ursprungsregel\n"
-"„+“ hinzu."
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Das Makefile wurde zweimal über die Standardeingabe angegeben."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (temporäre Datei)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (temporäre Datei)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr ""
 "Parallele Abarbeitung (-j) \n"
 "wird auf dieser Plattform nicht unterstützt."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Umstellung auf Einzel-Job-Verarbeitung (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Zeitschlitze der Jobservers auf %d begranzt\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "Jobserver-Semaphore wird erzeugt: (Fehler %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "Öffnen der Pipe für die Jobs"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "Initialisierung der Pipe für den Jobserver"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr ""
 "Symbolische Verknfungen werdfen nicht unterstützt: -L wird abgeschaltet."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Aktualisiere „make“-Steuerdateien...\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr ""
 "„make“-Steuerdatei „%s“ könnte eine Schleife enthalten; \n"
 "es wird nicht neu erzeugt.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Konnte die „make“-Steuerdatei „%s“ nicht neu erstellen."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Die eingebundene „make“-Steuerdatei „%s“ wurde nicht gefunden."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Die „make“-Steuerdatei „%s“ wurde nicht gefunden"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Konnte nicht in das ursprüngliche Verzeichnis wechseln."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Erneute Ausführung[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (temporäre Datei): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL beinhaltet mehr als ein Ziel"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Es wurden keine Ziele angegeben und keine „make“-Steuerdatei gefunden"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Keine Ziele"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Aktualisieren der Ziele...\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "Warnung: Mit der Uhr stimmt etwas nicht. \n"
 "         Der Bauauftrag könnte unvollständig sein."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Aufruf: %s [Optionen] [Ziele] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1344,7 +1287,7 @@ msgstr ""
 "\n"
 "Diese Programm wurde für %s gebaut\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1353,32 +1296,32 @@ msgstr ""
 "\n"
 "Diese Programm wurde für %s (%s) gebaut\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Fehlermeldungen (auf Englisch) an <bug-make@gnu.org> senden.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "Die Option „%s%s“ verlangt eine nicht-leere Zeichenkette als Argument"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "Die Option „-%c“ verlangt eine positive ganze Zahl als Argument"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sGebaut für %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sGebaut für %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1392,7 +1335,7 @@ msgstr ""
 "verteilen.\n"
 "%sSoweit es die Gesetze erlauben gibt es KEINE GARANTIE.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1401,7 +1344,7 @@ msgstr ""
 "\n"
 "# „Make“-Datenbank; erstellt am: %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1410,29 +1353,29 @@ msgstr ""
 "\n"
 "# „Make“-Datenbank beendet am: %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Unbekannter Fehler %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: Nutzer %lu (tatsächlich %lu), Gruppe %lu (tatsächlich %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Initialisierter Zugriff"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Zugriff durch Benutzer"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Zugriff durch „make“"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Kindprozess"
 
@@ -1481,9 +1424,8 @@ msgid "%s[%u]: Leaving directory '%s'\n"
 msgstr "%s[%u]: Verzeichnis „%s“ wird verlassen\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "Schreibfehler: %s"
+msgstr "Schreibfehler: Standardausgabe"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1499,229 +1441,264 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "Öffnen der Pipe für die Jobs"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "Öffnen der Pipe für die Jobs"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "Initialisierung der Pipe für den Jobserver"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "Interner Fehler: ungültige --jobserver-auth Angabe „%s“"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Jobserver-Klient (fds %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "Initialisierung der Pipe für den Jobserver"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "Job-Server wird geschrieben"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "pselect der Jobs-Pipeline"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "Lese Pipe für die Jobs"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "„make“-Steuerdateien werden gelesen...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "„make“-Steuerdatei „%s“ wird gelesen"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (kein Standard-Ziel)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (Suchpfad)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (macht nichts)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (keine ~-Auflösung)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "UTF-8 BOM in makefile „%s“ wird übersprungen\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "UTF-8 BOM im makefile-Puffer wird übersprungen\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "Ungültige Syntax in der Bedingung"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: konnte nicht geladen werden"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "Rezept beginnt vor dem ersten Ziel"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "Es fehlt eine Regel vor der Regel"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (Meinten Sie TAB anstelle von 8 Leerzeichen?)"
+msgstr "fehlender Trenner (Meinten Sie TAB anstelle von 8 Leerzeichen?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "Fehlende Trennung%s"
+msgstr "Fehlender Trenner"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "Es fehlt ein Ziel-Muster"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "Mehrfache Ziel-Muster"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "Ziel-Muster enthält kein „%%“"
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "Fehlendes „endif“"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "Leerer Variablenname"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "Überflüssiger Text nach einer „define“-Anweisung"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "Fehlendes „endef“, nicht abgeschlossenes „define“"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "Überflüssiger Text nach einer „endef“-Anweisung"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "Überflüssiger Text nach einer „%s“-Anweisung"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "Überflüssiges „%s“"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "Es ist nur ein „else“ pro Bedingung erlaubt"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Falsche Ziel-bezogene Variablendefinition"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "Voraussetzungen können nicht in Regeln definiert werden"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "Implizite und statische Muster-Regeln wurden vermischt"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "Implizite und normale Regeln wurden vermischt"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "Target „%s“ passt nicht zum Ziel-Muster"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "Das Ziel „%s“ enthält sowohl „:“- als auch „::“-Einträge"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "Das Ziel „%s“ steht mehrfach in derselben Regel."
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "Warnung: Die Befehle für das Ziel „%s“ werden überschrieben"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "Warnung: Alte Befehle für das Ziel „%s“ werden ignoriert"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "Implizite und normale Regeln wurden vermischt"
+msgstr "*** Implizite und normale Regeln wurden vermischt"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "Warnung: NULL-Zeichen gelesen; der Rest der Zeile wird ignoriert"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Für das Ziel „%s“ ist nichts zu tun."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "„%s“ ist bereits aktuell."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Die Datei „%s“ wird \"gestutzt\" (der Abhängigkeitsgraph).\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr ""
 "%sKeine Regel vorhanden, um das Ziel „%s“, \n"
 "  benötigt von „%s“, zu erstellen%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sKeine Regel, um „%s“ zu erstellen%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Betrachte Ziel-Datei „%s“.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr ""
 "Es wurde kürzlich versucht, die Datei „%s“ zu aktualisieren,\n"
 "dies schlug aber fehl.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Die Datei „%s“ wurde bereits betrachtet.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Die Datei „%s“ wird immer noch aktualisiert.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Aktualisierung der Datei „%s“ beendet.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Die Datei „%s“ existiert nicht.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1729,143 +1706,143 @@ msgstr ""
 "*** Warnung: mit .LOW_RESOLUTION_TIME gekennzeichnete Datei „%s“ hat einen\n"
 "             hochaufgelösten Zeitstempel"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Eine implizite Regel für „%s“ wurde gefunden.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Keine implizite Regel für „%s“ gefunden.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Die Standard-Regel für „%s“ wird verwendet.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Zirkuläre Abhängigkeit %s <- %s wird nicht verwendet."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Fertig mit den Voraussetzungen für die Ziel-Datei „%s“.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Die Voraussetzungen von „%s“ werden fertiggestellt.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Die Arbeit an der Target-Datei „%s“ wurde aufgegeben.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Das Ziel „%s“ wurde wegen Fehlern nicht aktualisiert."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Die Datei „%s“ ist älter als das davon abhängige Ziel „%s“.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr ""
 "Die Datei „%s“, Voraussetzung für das Ziel „%s“, \n"
 "existiert nicht.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Die Datei „%s“ ist jünger als das davon abhängige Ziel „%s“.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Die Datei „%s“ ist älter als das davon abhängige Ziel „%s“.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr ""
 "Das Ziel „%s“ hat einen doppelten Doppelpunkt \n"
 "und keine Voraussetzungen.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr ""
 "Kein Kommando für „%s“ und keine Voraussetzung \n"
 "wurde tatsächlich verändert.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "„%s“ wird aufgrund der Keinnzeichnung als always-make erzeugt.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "Es ist nicht notwendig, das Ziel „%s“ neu zu erzeugen"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; benutze VPATH-Name „%s“"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Das Target „%s“ muss neu erzeugt werden.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  Der VPATH-Name „%s“ wird ignoriert.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Die Regel für „%s“ wird gerade ausgeführt.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Fehler beim Aktualisieren der Ziel-Datei „%s“.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Die Zieldatei „%s“ wurde erfolgreich aktualisiert.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Zieldatei „%s“ muss bei -q aktualisiert werden.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Die Standard-Kommandos für „%s“ werden verwendet.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Warnung: Datei „%s“ hat zukünftige Änderungszeit"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Warnung: Datei „%s“ hat hat in der Zukunft liegende Änderungszeit %s"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ".LIBPATTERNS Element „%s“ ist kein Muster"
@@ -1875,7 +1852,7 @@ msgstr ".LIBPATTERNS Element „%s“ ist kein Muster"
 msgid "Customs won't export: %s\n"
 msgstr "Customs wird nicht exportieren: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1883,7 +1860,7 @@ msgstr ""
 "\n"
 "# Implizite Regeln"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1891,7 +1868,7 @@ msgstr ""
 "\n"
 "# Keine impliziten Regeln vorhanden."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1900,11 +1877,11 @@ msgstr ""
 "\n"
 "# %u implizite Regeln, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " Terminal."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "BUG: „num_pattern_rules“ falsch!  %u != %u"
@@ -2065,7 +2042,7 @@ msgstr "Informationsanforderung"
 msgid "Floating point co-processor not available"
 msgstr "Es ist kein Koprozessor für Fließkommaoperationen vorhanden"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -2074,7 +2051,7 @@ msgstr ""
 "\n"
 "%s Keine Puffer für strcache\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2085,7 +2062,7 @@ msgstr ""
 "%s Puffer für strcache: %lu (%lu) / Zeichenketten = %lu / Speicher = %lu B / "
 "ø = %lu B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
@@ -2093,19 +2070,19 @@ msgstr ""
 "%s aktueller Puffer: Größe = %hu B / benutzt = %hu B / Anzahl = %hu / ø = "
 "%hu B\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s andere verwendete: Summe = %lu B / Anzahl = %lu / /ø = %lu B\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 "%s andere freie: Summe = %lu B / Max = %lu B / Min = %lu B / ø = %hu B\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2114,7 +2091,7 @@ msgstr ""
 "\n"
 "%s Leistung von strcache: Suchen = %lu / Trefferrate = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2122,46 +2099,46 @@ msgstr ""
 "# Statistik für Hashtabelle:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automatisch"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "Standard"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "Umgebung"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "Makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "Umgebung per -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "Kommandozeile"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "„override“-Anweisung"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (aus „%s“, Zeile %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr ""
 "# Hashtabellen-Statistik für Variablen:\n"
 "\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2169,7 +2146,7 @@ msgstr ""
 "\n"
 "# Variablen\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2177,7 +2154,7 @@ msgstr ""
 "\n"
 "# Musterspezifische Variablenwerte"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2185,7 +2162,7 @@ msgstr ""
 "\n"
 "# Keine musterspezifischen Variablenwerte."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2204,87 +2181,37 @@ msgstr "Warnung: undefinierte Variable „%.*s“"
 msgid "sys$search() failed with %d\n"
 msgstr "„sys$search“ schlug mit %d fehl\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Warnung: Umleitung ins Leere!\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "Interner Fehler: „%s“ command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr "-Warnung: Vielleicht müssen Sie STRG-Y aus DCL wieder ermöglichen.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "BUILTIN [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "BUILTIN CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "BUILTIN CD %s\n"
-
-#: vmsjobs.c:505
+#: vmsjobs.c:1228
 #, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Unbekanntes eingebautes Kommando „%s“\n"
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Fehler: Leere Anweisung\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Datei %s auf Standardeingabe umgeleitet\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Fehlerausgabe nach %s umgeleitet\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Ausgabe nach %s umgeleitet\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Ausgabe nach %s umgeleitet\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "%.*s anhängen und aufräumen\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "%s wird stattdessen ausgeführt\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Fehler %d beim Starten eines Kindprozesses\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2292,11 +2219,11 @@ msgstr ""
 "\n"
 "# VPATH-Suchpfade\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# Keine „vpath“-Suchpfade."
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2305,7 +2232,7 @@ msgstr ""
 "\n"
 "# %u „vpath“-Suchpfade.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2313,7 +2240,7 @@ msgstr ""
 "\n"
 "# Kein allgemeiner Suchpfad (Variable „VPATH“)."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2323,21 +2250,94 @@ msgstr ""
 "# Allgemeiner Suchpfad (Variable „VPATH“):\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Zeitschlitze der Jobservers auf %d begranzt\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "Jobserver-Semaphore wird erzeugt: (Fehler %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"interner Fehler: die Semaphore „%s“ des Jobservers kann nicht geöffnet "
+"werden:\n"
+"                 (Fehler %ld: %s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Jobserver-Klient (Semaphore %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "Freigabe der Jobserver-Semaphore: (Fehler %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "warten auf Semaphore oder Kindprozess: (Fehler %ld: %s)"
+
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s: die Regel für Ziel „%s“ scheiterte"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] Fehler 0x%x%s"
+
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
 #~ msgid "internal error: multiple --sync-mutex options"
 #~ msgstr "Interner Fehler: mehrfache --sync-mutex Optionen"
 
 #~ msgid "internal error: multiple --jobserver-fds options"
 #~ msgstr "Interner Fehler: mehrfache --jobserver-fds Optionen"
 
+#~ msgid "dup jobserver"
+#~ msgstr "Jobserver verdoppelt"
+
 #~ msgid "virtual memory exhausted"
 #~ msgstr "Der virtuelle Speicher ist verbraucht"
 
 #~ msgid "write error"
 #~ msgstr "Schreibfehler"
 
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Warnung: Umleitung ins Leere!\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "Interner Fehler: „%s“ command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "BUILTIN [%s][%s]\n"
+
 #~ msgid "BUILTIN RM %s\n"
 #~ msgstr "BUILTIN RM %s\n"
 
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Unbekanntes eingebautes Kommando „%s“\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Fehler: Leere Anweisung\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Datei %s auf Standardeingabe umgeleitet\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Fehlerausgabe nach %s umgeleitet\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Ausgabe nach %s umgeleitet\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Fehler %d beim Starten eines Kindprozesses\n"
+
 #~ msgid "#  Invalid value in `update_status' member!"
 #~ msgstr "#  Ungültiger Wert in „update_status“-Eintrag!"
 
index b671030..172555f 100644 (file)
Binary files a/po/es.gmo and b/po/es.gmo differ
index 904e1d3..f2d4f33 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -1,17 +1,17 @@
 # Mensajes en español para GNU make.
-# Copyright (C) 1996, 2001, 2011, 2013 Free Software Foundation, Inc.
+# Copyright (C) 1996, 2001, 2011, 2013, 2014 Free Software Foundation, Inc.
 # This file is distributed under the same license as the make package.
 # Max de Mendizábal <max.de.mendizabal@gmail.com>, 1996, 2011.
-# Antonio Ceballos <aceballos@gmail.com>, 2013
+# Antonio Ceballos <aceballos@gmail.com>, 2013, 2014, 2016
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU make 4.0\n"
+"Project-Id-Version: GNU make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-12-08 23:28+0200\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-26 23:05+0200\n"
 "Last-Translator: Antonio Ceballos <aceballos@gmail.com>\n"
-"Language-Team: Spanish <es@li.org>\n"
+"Language-Team: Spanish <es@tp.org.es>\n"
 "Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -58,58 +58,59 @@ msgstr "touch: El miembro '%s' no existe en '%s'"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: Código de retorno erróneo de ar_member_touch en '%s'"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 "fallo en lbr$set_module() para extraer la información del módulo, estado = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "fallo en lbr$ini_control() con estado = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "Error al abrir la biblioteca '%s' para buscar al elemento '%s'"
+msgstr ""
+"error al abrir la biblioteca '%s' para buscar el estado %d del elemento"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Miembro '%s'%s: %ld bytes en %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (el nombre puede estar truncado)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Fecha %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, modo = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "Las instrucciones tienen demasiadas líneas (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Interrumpir.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr ""
 "*** [%s] El miembro de archivo '%s' podría estar incorrecto; aunque no se "
 "elimina"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr ""
@@ -117,32 +118,32 @@ msgstr ""
 
 # Propongo un cambio en el tiempo verbal: Se borra el archivo temporal. sv
 # Ok. mm
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Se borra el archivo '%s'"
 
 # Propongo un cambio en el tiempo verbal: Se borra el archivo temporal. sv
 # Ok. mm
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Se borra el archivo '%s'"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  las instrucciones para ejecutar"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (integrado):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (de '%s', linea %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -150,7 +151,7 @@ msgstr ""
 "\n"
 "# Directorios\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: podría no estar establecido.\n"
@@ -158,14 +159,14 @@ msgstr "# %s: podría no estar establecido.\n"
 # ¿No sobraría el "posiblemente"?
 # Propongo dejarlo en " no se pudo abrir ". sv
 # Ok. Es consistente con otras traducciones. mm
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (llave %s, mtime %d): no se pudo abrir.\n"
 
 # En el K & R aparece inode traducido como nodo-i. ¿qué te parece? sv
 # Bien. Me gusta con el guioncito. mm
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr ""
@@ -174,49 +175,49 @@ msgstr ""
 # ¿No sobraría el "posiblemente"?
 # Propongo dejarlo en " no se pudo abrir ". sv
 # Ok. Es consistente con otras traducciones. mm
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (dispositivo %ld, nodo-i %ld): no se pudo abrir.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (llave %s, mtime %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (dispositivo %d, nodo-i [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (dispositivo %ld, nodo-i %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "No"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " archivos, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "no"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " imposibilidades"
 
 # ¿"So far" no era "hasta ahora"? (no me hagas mucho caso) sv
 # Si tu traducción es mejor. Aceptada. mm
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " hasta ahora."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " imposibilidades en %lu directorios.\n"
@@ -238,18 +239,18 @@ msgstr "La variable recursiva '%s' se auto-referencia"
 # No me gusta nada ( lo siento )
 # ¿ Qué tal : La referencia a una variable está sin terminar em+
 # Creo que tienes razón la voz pasiva es muy desagradable. mm.
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "la referencia a la variable está sin terminar"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Se especificaron instrucciones para el archivo '%s' en %s:%lu,"
 
 # Buscando en las legras implícitas em+
 # Utilicé por búsqueda en para evitar el gerundio. mm
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ""
@@ -258,7 +259,7 @@ msgstr ""
 
 # "now" es "ahora". ¿te lo has comido consciente o inconscientemente? sv
 # inconscientemente. mm
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "pero '%s' se considera ahora como el mismo archivo que `%s'."
@@ -267,7 +268,7 @@ msgstr "pero '%s' se considera ahora como el mismo archivo que `%s'."
 # "To ignore" *no* es ignorar. sv
 # Propongo "no serán tenidas en cuenta" a falta de algo mejor.
 # Ok. Mi necedad sobrepasa el milenio. mm
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ""
@@ -277,46 +278,46 @@ msgstr ""
 # Me suena que eso de colon es algo así como punto, dos puntos o punto y coma.
 # ¿Podrías comprobarlo? sv
 # Es un punto sencillo (.). A ver si te gusta mi propuesta. mm
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "no se puede cambiar un punto (.) '%s' por dos puntos (:) '%s'"
 
 # Lo mismo. sv
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "no se pueden cambiar dos puntos (:) '%s' por un punto (.) '%s'"
 
 # Propongo un cambio en el tiempo verbal: Se borra el archivo temporal. sv
 # Ok. mm
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Se borra el archivo intermedio '%s'"
 
 # Propongo un cambio en el tiempo verbal: Se borra el archivo temporal. sv
 # Ok. mm
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "*** Se borran los archivos intermedios...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Hora actual"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Fecha fuera de intervalo; sustituyéndola %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# No es un objetivo:"
 
 # Pondría: es una dependencia de em+
 # Si, tienes razón. mm
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Archivo valioso (es una dependencia de .PRECIOUS)."
 
@@ -328,7 +329,7 @@ msgstr "#  Archivo valioso (es una dependencia de .PRECIOUS)."
 # No. Incondicional no es una traducción correcta. Que tal si al rato
 # se les ocurre hacer una nueva instrucción .INCONDITIONAL.
 # Si quieres podríamos pensar en otra traducción como señuelo o algo así. mm
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  objetivo falso (dependencia de .PHONY)."
 
@@ -339,7 +340,7 @@ msgstr "#  objetivo falso (dependencia de .PHONY)."
 # Están traduciendo commands como comandos? Son más bien ordenes o
 # instrucciones. Por mi parte no hay problema, incluso me gusta más
 # comandos, pero es un anglicismo. mm
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Objetivo en línea de instrucciones."
 
@@ -351,11 +352,11 @@ msgstr "#  Objetivo en línea de instrucciones."
 # Así pues tu traducción es completamente equivocada, lo siento.
 # Pondría: Fichero por defecto o definido en la variable MAKEFILE em+
 # Cierto, lo has entendido bien. Arreglo acorde. mm
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Por omisión, MAKEFILES, o -include/sinclude makefile."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "#  Regla incorporada"
 
@@ -363,7 +364,7 @@ msgstr "#  Regla incorporada"
 # Ok. Es más literal. mm
 # Atención ! , es la búsqueda 'de'reglas implícitas em+
 # Ok. Ojo, debo pluralizar regla e implícita. Platicarlo con Ulrich. mm
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  La búsqueda de reglas implícitas ha sido efectuada."
 
@@ -371,22 +372,22 @@ msgstr "#  La búsqueda de reglas implícitas ha sido efectuada."
 # Ok. Es más literal. mm
 # Atención ! , es la búsqueda 'de'reglas implícitas em+
 # Ok. Ojo, debo pluralizar regla e implícita. Platicarlo con Ulrich. mm
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  La búsqueda de reglas implícitas ha sido efectuada."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Tema del patrón implícita/estática: '%s'\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  El archivo es una dependencia intermedia."
 
 # Sugerencia: "crea". sv
 # Ok. Aunque, viendolo bien, que tal "hace"? mm.
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  También hace:"
 
@@ -394,60 +395,60 @@ msgstr "#  También hace:"
 # Ok. Mejora. mm
 # No pondría nunca, sino simplemente 'no se comprobó 'em+
 # Si, es lo mismo pero es más español. mm
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  La fecha de modificación no se comprobó."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  El archivo no existe."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  El archivo es muy viejo."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Última modificación %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  El archivo ha sido actualizado."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  El archivo ha sido actualizado."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Las instrucciones continúan en ejecución (ESTO ES UN BUG)."
 
 # ¿No sería más bien "las instrucciones de las dependencias"? sv
 # Si, que babas soy. Ahora corrijo. mm
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr ""
 "#  Las instrucciones de las dependencias continúan en ejecución (ESTO ES UN "
 "BUG)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Actualizado con éxito."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Necesita ser actualizado (la opción -q está activa)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Fallo al ser actualizado."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  ¡Valor inválido en el miembro 'command_state'!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -455,7 +456,7 @@ msgstr ""
 "\n"
 "# Archivos"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -465,52 +466,56 @@ msgstr ""
 "# estadísticas de la tabla «hash» de los archivos:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: El campo '%s' no está en «cache»: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "el primer argumento de la función 'word' no es numérico"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "el primer argumento de la función 'word' debe ser mayor que 0"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "el primer argumento de la función 'wordlist' no es numérico"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "el segundo argumento de la función 'wordlist' no es numérico"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe: fallo en DuplicateHandle(In), (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe: fallo en DuplicateHandle(Err), (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "Fallo en CreatePipe(), (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): fallo en process_init_fd()\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Limpiando el archivo temporal %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "archivo: falta el nombre del archivo"
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "abrir: %s: %s"
@@ -524,55 +529,77 @@ msgstr "abrir: %s: %s"
 #  else
 #    printf ("%s[%u]: %s ", program, makelevel, message);
 # Como notarás lo del directorio va en otro lado.
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "escribir: %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
+#, c-format
+msgid "close: %s: %s"
+msgstr "cerrar: %s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "archivo: demasiados argumentos"
+
+# Probablemente sea aquí donde haya que ponerle el "el" para que "Entering"
+# concuerde bien con esta frase y con la anterior simultáneamente. sv
+# No. Ya revisé el fuente y transcribo el trozo pertinente:
+#  char *message = entering ? "Entering" : "Leaving";
+#  if (makelevel == 0)
+#    printf ("%s: %s ", program, message);
+#  else
+#    printf ("%s[%u]: %s ", program, makelevel, message);
+# Como notarás lo del directorio va en otro lado.
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr "leer: %s: %s"
+
+#: function.c:2275
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr "Operación de archivo no válida: %s"
+msgid "file: invalid file operation: %s"
+msgstr "archivo: operación de archivo no válida: %s"
 
-#: function.c:2324
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "Número de argumentos (%d) insuficientes para la función '%s'"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "No implementado en esta plataforma: función '%s'"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "la llamada a la función '%s' no concluyó: falta '%c'"
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "Nombre de función vacío\n"
+msgstr "Nombre de función vacío"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "Nombre de función no válido: %s\n"
+msgstr "Nombre de función no válido: %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "Nombre de función demasiado largo: %s\n"
+msgstr "Nombre de función demasiado largo: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "Número insuficiente de argumentos (%d) para la función %s\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "Número insuficiente de argumentos (%d) para la función %s"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "El número máximo de argumentos (%d) no es válido para la función %s\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "El número máximo de argumentos (%d) no es válido para la función %s"
 
 #: getopt.c:659
 #, c-format
@@ -689,7 +716,7 @@ msgstr "Buscando una regla implícita para el miembro del archivo '%s'.\n"
 # Me gusta evade, pero evita es correcto. Acepto tu sugerencia. mm
 # No me gusta se evita, pondría evitando em+
 # Ok. Pero a mi paranoia de evitar gerundios dónde la dejas? mm
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Evitando la recursión en la regla implícita.\n"
 
@@ -770,7 +797,7 @@ msgstr "Se encontró la dependencia '%s' como la VPATH '%s'.\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Se busca una regla con el archivo intermedio '%s'.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "No se puede crear un archivo temporal\n"
 
@@ -778,119 +805,91 @@ msgstr "No se puede crear un archivo temporal\n"
 # volcado de `core' no significa nada, que te parece si mejor dejamos
 # el core dumped, o bien volcado del núcleo o algo así. Por el momento
 # no cambio nada. mm
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (core dumped) [Núcleo vaciado a un archivo]"
 
 # Preferiría mil veces "sin efecto" o algo parecido. sv
 # Ok. Habíamos quedado en `no tiene efecto'. mm
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (no tiene efecto)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<integrado>"
 
-# No me gusta esta traducción de override. Mira a ver
-# si encaja mejor alguna de las dos que se proponen arriba
-# em+
-# Aunque no me acaba de convencer, que te parece ésto? mm
-#: job.c:503
+#: job.c:510
 #, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: fallo en las instrucciones para el objetivo '%s'"
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "%s[%s] Error %d%s"
-
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Error 0x%x%s"
-
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] Error %d%s"
 
 # ¿Y job -> trabajos? sv
 # Si, pero no hablas de una computadora multi-trabajos sino multi-tareas.
 # Por eso elegí tareas. Lo platicamos con más calma? mm
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Se espera a que terminen otras tareas...."
 
 # ¿De verdad se dice "vivo"? Si es un proceso, se me ocurre "activo". sv
 # Me gusta lo de activo. mm
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Hijo activo %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (remoto)"
 
 # Lo mismo, pon Proceso hijo, y quita lo que hay
 # entre paréntesis em+
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Se recupera al proceso hijo perdido %p PID %s %s\n"
 
 # Lo mismo, pon Proceso hijo, y quita lo que hay
 # entre paréntesis em+
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Se recupera al proceso hijo ganador %p PID %s %s\n"
 
 # Give up no es enfocar, es abandonar, o desistir em+
 # Si, metí la pata. mm
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Se limpia el archivo temporal %s\n"
 
 # Give up no es enfocar, es abandonar, o desistir em+
 # Si, metí la pata. mm
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Fallo al limpiar el archivo temporal por lotes %s (%d)\n"
 
 # Proceso hijo em+
 # Ok.
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Se elimina al proceso hijo %p PID %s%s de la cadena.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "liberar semáforo del servidor de tareas: (Error %ld: %s)"
-
 # Lo mismo, pon Proceso hijo, y quita lo que hay
 # entre paréntesis em+
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Se libera el token para el proceso hijo %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "escribir en el servidor de tareas"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "fallo en process_easy() para lanzar al proceso (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -901,78 +900,74 @@ msgstr ""
 
 # Proceso hijo em+
 # Ok.
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Se pone al proceso hijo %p (%s) PID %s%s en la cadena.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "semáforo o proceso hijo en espera: (Error %ld: %s)"
-
 # Lo mismo, pon Proceso hijo, y quita lo que hay
 # entre paréntesis em+
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Se obtiene el token para el proceso hijo %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "tubería de trabajos leídos"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: el objetivo '%s' no existe"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: actualizar el objetivo '%s' a causa de: %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "no se pueden forzar los límites de carga en este sistema operativo"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "no se puede forzar la carga límite: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "no hay más manejadores de archivos: no se puede duplicar stdin\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "no hay más manejadores de archivos: no se puede duplicar stdout\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "no hay más manejadores de archivos: no se puede duplicar stderr\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "No se puede restaurar stdin\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "No se puede restaurar stdout\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "No se puede restaurar stderr\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "hacer un hijo descarriado %s, aún se espera por el pid %s\n"
 
-#: job.c:2458
+#: job.c:2275
+#, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: No se encontró el programa\n"
+
+#: job.c:2277
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: No se encontró el programa"
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: No se encontró el programa\n"
 
 # ¿Y "el programa Shell"? (a secas) sv
 # Si. Suena mucho mejor. mm
@@ -980,26 +975,26 @@ msgstr "%s: No se encontró el programa"
 # yo pensaria que me falta un programa en mi sistema que se
 # llame shell. No se ha encontrado el 'shell'em+
 # Es bueno contar con una segunda opinión ... mm
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: No se ha encontrado el `shell'"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: el espacio ambiental podría estar agotado"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL ha cambiado (era '%s' y ahora es '%s')\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Se crea el archivo temporal %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -1007,7 +1002,7 @@ msgstr ""
 "Contenido del archivo de lotes:%s\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -1016,7 +1011,7 @@ msgstr ""
 "Contenido del archivo de lotes:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
@@ -1047,32 +1042,32 @@ msgstr "Fallo al cargar símbolo %s desde %s: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "Nombre de símbolo vacío en la carga: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Cargando símbolo %s desde %s\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "La operación 'load' no está implementada en esta plataforma."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Opciones:\n"
 
 # Lo mismo de arriba con "ignorar". sv
 # Ok. mm.
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr ""
 "  -b, -m                      No se tendrá en cuenta por compatibilidad.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 "  -B, --always-make           Hace incondicionalmente todos los objetivos.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -1083,7 +1078,7 @@ msgstr ""
 # ¿"depurado" o "depuración"? sv
 # Puse de depurado para evitar la cacofonía información depuración.
 # Sugerencias bienvenidas. mm
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr ""
 "  -d          Se imprimirán grandes cantidades de información de depurado.\n"
@@ -1091,14 +1086,14 @@ msgstr ""
 # ¿"depurado" o "depuración"? sv
 # Puse de depurado para evitar la cacofonía información depuración.
 # Sugerencias bienvenidas. mm
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=BANDERAS]    Se imprimirán varios tipos de información de "
 "depurado.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -1107,14 +1102,14 @@ msgstr ""
 "                Las variables ambientales se imponen a las de los "
 "makefiles.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "   --eval=CADENA               Evalúla la CADENA como una instrucción de un "
 "makefile.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -1122,7 +1117,7 @@ msgstr ""
 "  -f ARCHIVO, --file=ARCHIVO, --makefile=ARCHIVO\n"
 "                                   Lee al ARCHIVO como un makefile.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Muestra este mensaje y finaliza.\n"
 
@@ -1132,13 +1127,13 @@ msgstr "  -h, --help                  Muestra este mensaje y finaliza.\n"
 # tambien.
 # No me gusta este mensaje, preferiría: Se ignoran los errores obtenidos
 # en la ejecución de las instrucciones  em+
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 "  -i, --ignore-errors         No se toman en cuenta los errores provenientes "
 "de las instrucciones.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -1149,7 +1144,7 @@ msgstr ""
 # Yo traduciría "infinite" por "infinitos", no por "una infinidad", que
 # parece que son muchos menos... sv
 # Ok. mm
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -1160,14 +1155,14 @@ msgstr ""
 
 # No entiendo por qué aquí empleas subjuntivo: "pudieron". sv
 # Es incorrecto. Es una de las opciones `k' que dice... mm
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Sigue avanzando aún cuando no se puedan crear "
 "algunos objetivos.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -1177,7 +1172,7 @@ msgstr ""
 "      No inicia con trabajos múltiples a menos que la carga esté por debajo "
 "de N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -1185,7 +1180,7 @@ msgstr ""
 "  -L, --check-symlink-times   Utiliza el último mtime entre los enlaces "
 "simbólicos y los objetivos.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -1195,7 +1190,7 @@ msgstr ""
 "                              No ejecuta ninguna instrucción; sólo las "
 "muestra.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -1205,7 +1200,7 @@ msgstr ""
 "                           Supone que ARCHIVO es muy viejo y no lo "
 "reconstruye.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -1216,13 +1211,13 @@ msgstr ""
 
 # de 'make' em+
 # ok. mm
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr ""
 "  -p, --print-data-base       Se imprime la base de datos interna de "
 "'make'.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1236,7 +1231,7 @@ msgstr ""
 # ¡ Por favor ! , ¿ pero qué es eso de interconstruidas ?
 # Pon almacenadas internamente, que es exactamente lo que son :) em+
 # Bueno, bajo protesta. mm
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Se deshabilitan las reglas implícitas "
@@ -1247,17 +1242,17 @@ msgstr ""
 # ¡ Por favor ! , ¿ pero qué es eso de interconstruidas ?
 # Pon almacenadas internamente, que es exactamente lo que son :) em+
 # Bueno, bajo protesta. mm
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables  Se deshabilitan los ajustes a las variables "
 "almacenadas internamente.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       No muestra las intrucciones.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1270,7 +1265,7 @@ msgstr ""
 #
 # Pues entonces cámbialo arriba tambien em+
 # En donde? mm
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Se tocan los objetivos en vez de "
@@ -1279,20 +1274,20 @@ msgstr ""
 # ¿"depurado" o "depuración"? sv
 # Puse de depurado para evitar la cacofonía información depuración.
 # Sugerencias bienvenidas. mm
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                     Muestra trazas.\n"
 
 # Me comería el "Se" inicial. "Muestra la versión..." sv
 # Ok. mm
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 "  -v, --version               Muestra la versión del make y finaliza.\n"
 
 # Lo mismo. sv
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Muestra el directorio actual.\n"
 
@@ -1301,7 +1296,7 @@ msgstr "  -w, --print-directory       Muestra el directorio actual.\n"
 # apaga luz Mari Luz apaga luz ,que yo no puedo vivir con
 # tanta luz ... ( canción tradicional ) ( no lo pude evitar ) em+
 # Juar, Juar, Juar. Coincido, pero el sentido es el mismo. mm
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1309,7 +1304,7 @@ msgstr ""
 "  --no-print-directory        Desactiva -w, aún cuando haya sido activado "
 "implícitamente.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1320,7 +1315,7 @@ msgstr ""
 
 # Lo mismo. sv
 # Todas estas parecen descripciones de opciones.
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1328,27 +1323,27 @@ msgstr ""
 "  --warn-undefined-variables  Advierte cuando se hace una referencia a una "
 "variable no definida.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "no se permite que una cadena vacía sea el nombre de un archivo"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "se especificó un nivel de depuración desconocido '%s'"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "tipo de sincronización de salida desconocido '%s'"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr ""
 "%s: Se atrapó una interrupción/excepción (código = 0x%lx, dirección = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1363,125 +1358,80 @@ msgstr ""
 "Banderas de la excepción = %lx\n"
 "Dirección de la excepción = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Violación de acceso: operación de escritura en la dirección 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Violación de acceso: operación de lectura en la dirección 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "la función find_and_set_shell() pone el valor del default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr ""
 "la función find_and_set_shell() pone el valor de la ruta de búsceda "
 "default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s está suspendida por 30 segundos..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "se hizo un sleep(30). Continuando.\n"
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
-"error interno: no se pudo abrir el semáforo del servidor de tareas '%s': "
-"(Error %ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Cliente del servidor de tareas (semáforo %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "error interno: cadena --jobserver-fds inválida '%s'"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Cliente del servidor de tareas (fds %d,%d)\n"
+"atención: el servidor de tareas no está disponible: se utilizará -j1. Añada "
+"'+' a la regla padre del make."
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
 "atención: se fuerza a -jN en el submake: se deshabilita el modo de servidor "
 "de tareas."
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "servidor de tareas duplicado"
-
-#: main.c:1570
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-"atención: el servidor de tareas no está disponible: se utilizará -j1. Añada "
-"'+' a la regla padre del make."
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr ""
 "El archivo Makefile ha sido especificado dos veces desde la entrada estándard"
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (archivo temporal)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (archivo temporal)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr ""
 "Los trabajos en paralelo (-j) no están implementados en esta plataforma."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Reajustando al modo monotarea (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Ranuras del servidor de tareas limitads a %d\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "creando semáforo del servidor de tareas: (Error %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "creando una tubería de tareas"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "se inicializa la tubería al servidor de tareas"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Los enlaces simbólicos no están implementados: se deshabilitan con -L."
 
 # Antes pusiste "makefiles". Coherencia. sv
 # Cierto. mm
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Actualizando archivos makefiles....\n"
 
@@ -1491,62 +1441,62 @@ msgstr "Actualizando archivos makefiles....\n"
 # Pondría ( como en un mensaje anterior ) se autoreferencia ... em+
 # He puesto makefile con minúsculas , par ser coherentes em+
 # Ok. Es más breve. mm.
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr ""
 "El makefile '%s' podría entrar en bucle; por lo tanto, no se reconstruye.\n"
 
 # Lo mismo. sv
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Fallo al reconstruir el makefile '%s'."
 
 # Lo mismo. sv
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "No se encontró el makefile incluído '%s'."
 
 # Lo mismo. sv
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "No se encontró el makefile '%s'"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "No se pudo regresar al directorio original."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Re-ejecutando[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (archivo temporal)"
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL contien más de un objetivo"
 
 # Sugerencia: "No se especificó ningún objetivo ... " sv
 # Ok. Me gusta. mm
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "No se especificó ningún objetivo y no se encontró ningún makefile"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "No hay objetivos"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Actualizando los objetivos finales....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "atención: Se ha detectado una desviación en el reloj. La construcción podría "
@@ -1557,12 +1507,12 @@ msgstr ""
 # "target" es "objetivo", no "objetivos". Fíjate que lleva puntos
 # suspensivos, permitiendo así varios objetivos. sv
 # Ok. mm
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Modo de empleo: %s [opciones] [objetivo] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1571,7 +1521,7 @@ msgstr ""
 "\n"
 "Este programa fue construido para %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1580,36 +1530,36 @@ msgstr ""
 "\n"
 "Este programa construido para %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Informe sobre los errores a <bug-make@gnu.org>\n"
 
 # Me comería el "de" de "requiere de" sv
 # Ok. mm
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "la opción '%s%s' requiere un argumento no-vacío de tipo cadena"
 
 # Me comería el "de" de "requiere de" sv
 # Ok. mm
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "la opción '-%c' requiere un argumento positivo y entero"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sEste programa fue construido para %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sEste programa fue construido para %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1624,7 +1574,7 @@ msgstr ""
 "%sNo existe GARANTÍA ALGUNA, hasta los límites permitidos por las leyes "
 "aplicables.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1638,7 +1588,7 @@ msgstr ""
 # Porqué 'del', o pones 'del programa' Make o pones
 # 'de Make' em+
 # Ok. mm
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1647,29 +1597,29 @@ msgstr ""
 "\n"
 "# Se termina la base de datos de Make en %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Error desconocido %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: usuario %lu (real %lu), grupo %lu (real %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Acceso inicializado"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Acceso del usuario"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Acceso del Make"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Acceso del hijo"
 
@@ -1759,9 +1709,8 @@ msgstr "%s[%u]: se sale del directorio '%s'\n"
 #    printf ("%s[%u]: %s ", program, makelevel, message);
 # Como notarás lo del directorio va en otro lado.
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "error al escribir: %s"
+msgstr "error al escribir: stdout"
 
 # Interrumpido (?). sv
 # Mmgmh... El mensaje indica que hubo algún error muy grave y que por
@@ -1780,59 +1729,97 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "creando una tubería de tareas"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "duplicando una tubería de tareas"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "se inicializa la tubería al servidor de tareas"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "error interno: cadena --jobserver-auth inválida '%s'"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Cliente del servidor de tareas (fds %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "tubería al servidor de tareas"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "escribir en el servidor de tareas"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "tubería de trabajos «pselect»"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "tubería de trabajos leídos"
+
 # Sugerencia: eliminar la palabra "archivo". sv
 # Ok. Mejora. mm
-#: read.c:180
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Leyendo makefiles...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "Leyendo makefile '%s'"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (no hay objetivo por defecto)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (ruta de búsqueda)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (no importa)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (no hay expansión del ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "se salta BOM UTF-8 en el makefile '%s'\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "se salta BOM UTF-8 en el «buffer» del makefile\n"
 
 # ## Sintaxis no llevaba tilde.
 # Ok. mm
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "sintaxis no válida en condicional"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: fallo al cargar"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "las instrucciones comenzaron antes del primer objetivo"
 
@@ -1841,102 +1828,100 @@ msgstr "las instrucciones comenzaron antes del primer objetivo"
 # Cierto pareciera que se perdió dentro de algún circuito. mm
 # Falta 'la' regla em+
 # No no es la regla sino una regla pues puede ser cualquiera de ellas. mm
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "falta una regla antes de las instrucciones"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (¿Quiere decir TAB en vez de 8 espacios?)"
+msgstr "falta un separador (¿quiso decir TAB en vez de 8 espacios?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "falta un separador%s"
+msgstr "falta un separador"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "falta un patrón de objetivos"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "hay varios patrones de objetivos"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "el patrón de objetivo no contiene '%%'"
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "falta un 'endif'"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "nombre de variable vacío"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr ""
 "Hay un texto irrelevante o mal colocado después de la instrucción 'define'"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "falta un 'endef', no se terminó un 'define'"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr ""
 "Hay un texto irrelevante o mal colocado después de la instrucción 'endef'"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "Texto irrelevante o mal colocado después de la instrucción '%s'"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "irrelevante o mal colocado '%s'"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "sólo se admite un 'else' por condicional"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr ""
 "La definición de las variables específicas al blanco está mal construida"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr ""
 "los prerequisitos no pueden ser definidos por los guiones de instrucciones"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "las reglas implícitas y las de patrón estático están mezcladas"
 
 # Y 'las' normales  em+
 # Ok. mm
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "las reglas implícitas y las normales están mezcladas"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "el objetivo '%s' no coincide con el patrón de objetivos"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "el archivo de objetivos '%s' tiene líneas con : y ::"
 
 # Cambiaría given por 'proporcionó' o 'indicó' em+
 # Ok. mm
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "el objetivo '%s' se proporcionó más de una vez en la misma regla"
@@ -1945,44 +1930,44 @@ msgstr "el objetivo '%s' se proporcionó más de una vez en la misma regla"
 # si encaja mejor alguna de las dos que se proponen arriba
 # em+
 # Aunque no me acaba de convencer, que te parece ésto? mm
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "atención: se anulan las instrucciones para el objetivo '%s'"
 
 # Ojo con ignora. sv
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "atención: se ignoran las instrucciones viejas para el objetivo '%s'"
 
 # Y 'las' normales  em+
 # Ok. mm
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "las reglas implícitas y las normales están mezcladas"
+msgstr ""
+"*** las reglas implícitas y las normales están mezcladas: sintaxis obsoleta"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "atención: hay un carácter NUL; se ignora el resto de la línea"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "No se hace nada para '%s'."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "'%s' está actualizado."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Se poda el archivo '%s'.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr ""
@@ -1990,7 +1975,7 @@ msgstr ""
 
 # Sugerencia: No hay ninguna regla... sv
 # Como una no hay ninguna. mm
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sNo hay ninguna regla para construir el objetivo '%s'%s"
@@ -2001,7 +1986,7 @@ msgstr "%sNo hay ninguna regla para construir el objetivo '%s'%s"
 # de las que aparecen al hacer un make con la opción -d ( debug )
 # se refiere a lo que dice Santiago, es decir, 'archivo objetivo'  em+
 # Ok creo que tienen razón. mm
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Se considera el archivo objetivo '%s'.\n"
@@ -2012,32 +1997,32 @@ msgstr "Se considera el archivo objetivo '%s'.\n"
 # o bien "Se intentó sin éxito actualizar ..."
 # ¿Qué te parece? sv
 # Bien y tiene razón. mm
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Se intentó hace poco, sin éxito, actualizar el archivo '%s'.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Ya se ha tenido en cuenta el archivo '%s'.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Se continúa actualizando el archivo '%s'.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Se terminó de actualizar el archivo '%s'.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "El archivo '%s' no existe.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -2045,26 +2030,26 @@ msgstr ""
 "*** Atención: el archivo .LOW_RESOLUTION_TIME '%s' tiene una marca de tiempo "
 "de alta resolución"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Se encontró una regla implícita para '%s'.\n"
 
 # Se ha encontrado em+
 # Ok, pero procuro evitar como a la muerte los gerundios. mm
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "No se ha encontrado ninguna regla implícita para '%s'.\n"
 
 # Por defecto, como haces arriba em+
 # en efecto, mm
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Se utilizan las instrucciones por omisión para '%s'.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Se elimina la dependencia circular %s <- %s."
@@ -2072,73 +2057,73 @@ msgstr "Se elimina la dependencia circular %s <- %s."
 # Lo mismo de antes con "target file". sv
 # Estoy de acuerdo con él ( por una vez ;) ) em+
 # Ok. mm
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Se terminaron las dependencias del archivo objetivo '%s'.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Se están construyendo las dependencias de '%s'.\n"
 
 # Give up no es enfocar, es abandonar, o desistir em+
 # Si, metí la pata. mm
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Se abandona el archivo objetivo '%s'.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Debido a los errores, el objetivo '%s' no se reconstruyó."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "La dependencia '%s' es solo de orden para el objetivo '%s'.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "La dependencia '%s' del objetivo '%s' no existe.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "La dependencia '%s' es más reciente que el objetivo '%s'.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "La dependencia '%s' es anterior al objetivo '%s'.\n"
 
 # Ahorra espacio, y pon '::'  en vez de eso :) em+
 # Bueno, no es mala idea. A ver si te gusta lo que puse. mm
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr ""
 "El objetivo '%s' es de tipo dos puntos dos veces (::)\n"
 "y no tiene dependencias.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "No hay instrucciones para '%s' y ninguna dependencia ha cambiado.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Haciendo '%s' debido a la bandera always-make.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "No es necesario reconstruir el objetivo '%s'."
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; se usa el nombre del VPATH '%s'"
@@ -2146,17 +2131,17 @@ msgstr "; se usa el nombre del VPATH '%s'"
 # Revisa todo el po con un search, y mira a ver si decides usar
 # regenerar o reconstruir ( prefiero lo último 10000 veces ) em+
 # Ok, buena propuesta. mm
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Se debe reconstruir el objetivo '%s'.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  Se ignora el nombre del VPATH '%s'.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Las instrucciones de '%s' se están ejecutando.\n"
@@ -2164,48 +2149,48 @@ msgstr "Las instrucciones de '%s' se están ejecutando.\n"
 # Target file no es archivo de objetivos, sino el archivo objetivo
 # make no tiene ningún archivo de objetivos em+
 # Ok. mm
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Fallo al reconstruir el archivo objetivo '%s'.\n"
 
 # Lo mismo em+
 # Ok. mm
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Se reconstruyó con éxito el archivo objetivo '%s'.\n"
 
 # Otra vez em+
 # Ok, no te puedes quejar de falta de consistencia en este caso! mm
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Se necesita reconstruir el archivo objetivo '%s' con la opción -q.\n"
 
 # Por defecto, como haces arriba em+
 # en efecto, mm
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Se utilizan las instrucciones por defecto para '%s'.\n"
 
 # Ubicada :)) , que tal futura, a secas ? em+
 # Bueno, sonaba como StarTrek, muy chido, pero acepto tu sugerencia. mm
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Atención: El archivo '%s' tiene una hora de modificación en el futuro"
 
 # Ubicada :)) , que tal futura, a secas ? em+
 # Bueno, sonaba como StarTrek, muy chido, pero acepto tu sugerencia. mm
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr ""
 "Atención: El archivo '%s' tiene una hora de modificación %s s en el futuro"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "El elemento .LIBPATTERNS '%s' no es un patrón"
@@ -2227,7 +2212,7 @@ msgstr "El elemento .LIBPATTERNS '%s' no es un patrón"
 msgid "Customs won't export: %s\n"
 msgstr "Los valores definidos por el usuario no se exportarán: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -2235,7 +2220,7 @@ msgstr ""
 "\n"
 "# Reglas implícitas."
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -2243,7 +2228,7 @@ msgstr ""
 "\n"
 "# No hay reglas implícitas."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -2252,7 +2237,7 @@ msgstr ""
 "\n"
 "# %u reglas implícitas, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminal."
 
@@ -2260,7 +2245,7 @@ msgstr " terminal."
 # Gracias. mm
 # ¿ qué tal erróneo ? em+
 # Si, suena mejor. mm
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "BUG: ¡num_pattern_rules erróneo!  %u != %u"
@@ -2473,7 +2458,7 @@ msgstr "Petición de información"
 msgid "Floating point co-processor not available"
 msgstr "Coprocesador de punto flotante no disponible"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -2482,7 +2467,7 @@ msgstr ""
 "\n"
 "%s No hay «buffers» strcache\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2493,7 +2478,7 @@ msgstr ""
 "%s «buffers» strcache: %lu (%lu) / cadenas = %lu / almacenamiento = %lu B / "
 "promedio = %lu B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
@@ -2501,13 +2486,13 @@ msgstr ""
 "%s «buffer» actual: tamaño = %hu B / utilizado = %hu B / número = %hu / "
 "promedio = %hu B\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr ""
 "%s otros utilizado: total = %lu B / / número = %lu / promedio = %lu B\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
@@ -2515,7 +2500,7 @@ msgstr ""
 "%s otros libre: total = %lu B / máx = %lu B / mín = %lu B / promedio = %hu "
 "B\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2524,7 +2509,7 @@ msgstr ""
 "\n"
 "%s rendimiento de strcache: búsquedas = %lu / coincidencias = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2534,44 +2519,44 @@ msgstr ""
 
 # Lo he cmabiado em+
 # Ok. Deberíamos platicarlo con Ulrich. mm
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automática/o"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "por defecto"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "entorno"
 
 # Sugerencia: No poner archivo. sv
 # Ok. mm
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
 # 'bajo -e' = 'con -e activo' em+
 # Ok. Esta inversión en los idiomas sajones se pega. mm
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "con -e activo"
 
 # Línea de comandos me parece correcto em+
 # Ver arriba. Estoy de acuerdo si así han traducido en otros lados. mm
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "línea de instrucciones"
 
 # Creo que tendremos un problema con instrucción, comando
 # , programa y directiva . Está claro que aquí es directiva em+
 # Ok, pero no deja de sonar a RoboCop. A ver que te parece como quedó. mm
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "directiva 'override'"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (de '%s', línea %lu):"
@@ -2581,11 +2566,11 @@ msgstr " (de '%s', línea %lu):"
 # Estos mensajes son para debug, no creo que haga falta usar cubetas ;) em+
 # Tienes razón, si el debugueador no lo entiende pues, ... que se
 # dedique a otra cosa. mm
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# estadísticas del conjunto de variables de la tabla «hash»:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2593,7 +2578,7 @@ msgstr ""
 "\n"
 "# Variables\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2601,7 +2586,7 @@ msgstr ""
 "\n"
 "# Valores de variables específicas al patrón"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2609,7 +2594,7 @@ msgstr ""
 "\n"
 "# No hay valores de variables específicas al patrón."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2630,102 +2615,41 @@ msgstr "atención: la variable '%.*s' no ha sido definida"
 msgid "sys$search() failed with %d\n"
 msgstr "fallo en sys$search() con %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Atención: redirección vacía\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "error interno: '%s' command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr "-atención, deberás rehabilitar el manejo del CTRL-Y desde el DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "INTERCONSTRUIDO [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
-msgstr "CD INTERCONSTRUIDO %s\n"
+msgstr "CD INTEGRADO %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "CD INTERCONSTRUIDO %s\n"
-
-# Por defecto, como haces arriba em+
-# en efecto, mm
-#: vmsjobs.c:505
+#: vmsjobs.c:1228
 #, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Instrucción integrada desconocida '%s'.\n"
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Error, comando vacío\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Entrada redirigida desde %s\n"
-
-# Probablemente sea aquí donde haya que ponerle el "el" para que "Entering"
-# concuerde bien con esta frase y con la anterior simultáneamente. sv
-# No. Ya revisé el fuente y transcribo el trozo pertinente:
-#  char *message = entering ? "Entering" : "Leaving";
-#  if (makelevel == 0)
-#    printf ("%s: %s ", program, message);
-#  else
-#    printf ("%s[%u]: %s ", program, makelevel, message);
-# Como notarás lo del directorio va en otro lado.
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Se redirecciona el error a %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Salida redirigida a %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Salida redirigida a %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Agregada a %.*s y limpieza\n"
 
 # "en sustituto" me suena muy raro. Propongo: "en su lugar" en su lugar :-) sv
 # Ok. mm
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "En su lugar, se ejecuta %s\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Error al lanzar el proceso %d\n"
-
 # ¿Y al revés?: Rutas de búsqueda VPATH. sv
 # Mejora
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2735,13 +2659,13 @@ msgstr ""
 
 # Rutas creo que queda mejor. sv
 # Ok. Es más común. mm
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# No hay rutas de búsqueda 'vpath'."
 
 # ¡Ah! Aquí si que pones el vpath al final, ¿eh? :-) sv
 # You really got me! mm
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2750,7 +2674,7 @@ msgstr ""
 "\n"
 "# %u rutas de búsqueda 'vpath'.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2758,7 +2682,7 @@ msgstr ""
 "\n"
 "# No hay ruta de búsqueda general (variable 'VPATH')."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2768,6 +2692,100 @@ msgstr ""
 "# Ruta de búsqueda general (variable 'VPATH'):\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Ranuras del servidor de tareas limitads a %d\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "creando semáforo del servidor de tareas: (Error %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"error interno: no se pudo abrir el semáforo del servidor de tareas '%s': "
+"(Error %ld: %s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Cliente del servidor de tareas (semáforo %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "liberar semáforo del servidor de tareas: (Error %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "semáforo o proceso hijo en espera: (Error %ld: %s)"
+
+# No me gusta esta traducción de override. Mira a ver
+# si encaja mejor alguna de las dos que se proponen arriba
+# em+
+# Aunque no me acaba de convencer, que te parece ésto? mm
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s: fallo en las instrucciones para el objetivo '%s'"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] Error 0x%x%s"
+
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
+#~ msgid "dup jobserver"
+#~ msgstr "servidor de tareas duplicado"
+
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Atención: redirección vacía\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "error interno: '%s' command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "INTEGRADA(S) [%s][%s]\n"
+
+#~ msgid "BUILTIN ECHO %s->%s\n"
+#~ msgstr "ECO INTEGRADO %s->%s\n"
+
+# Por defecto, como haces arriba em+
+# en efecto, mm
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Instrucción integrada desconocida '%s'\n"
+
+#~ msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+#~ msgstr ""
+#~ "La instrucción integrada se desconoce o no funciona en .ONESHELL: '%s'\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Error, comando vacío\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Entrada redirigida desde %s\n"
+
+# Probablemente sea aquí donde haya que ponerle el "el" para que "Entering"
+# concuerde bien con esta frase y con la anterior simultáneamente. sv
+# No. Ya revisé el fuente y transcribo el trozo pertinente:
+#  char *message = entering ? "Entering" : "Leaving";
+#  if (makelevel == 0)
+#    printf ("%s: %s ", program, message);
+#  else
+#    printf ("%s[%u]: %s ", program, makelevel, message);
+# Como notarás lo del directorio va en otro lado.
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Se redirecciona el error a %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Salida redirigida a %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Error al lanzar el proceso %d\n"
+
 #~ msgid "internal error: multiple --sync-mutex options"
 #~ msgstr "error interno: hay varias opciones --sync-mutex"
 
index 4967e23..7642bb2 100644 (file)
Binary files a/po/fi.gmo and b/po/fi.gmo differ
index ab3df02..4a160f3 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: make 3.81-b3\n"
+"Project-Id-Version: make 4.1\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2005-07-06 21:36+0300\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2015-07-28 21:07+0300\n"
 "Last-Translator: Lauri Nurmi <lanurmi@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
 "Language: fi\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.3\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: ar.c:46
-#, fuzzy, c-format
+#, c-format
 msgid "attempt to use unsupported feature: '%s'"
-msgstr "yritettiin käyttää ominaisuutta, jolle ei ole tukea: \"%s\""
+msgstr "yritettiin käyttää ominaisuutta, jolle ei ole tukea: ”%s”"
 
 #: ar.c:123
 msgid "touch archive member is not available on VMS"
 msgstr "arkistojäsenten kosketus ei ole mahdollista VMS:ssä"
 
 #: ar.c:147
-#, fuzzy, c-format
+#, c-format
 msgid "touch: Archive '%s' does not exist"
-msgstr "touch: Arkistoa \"%s\" ei ole olemassa"
+msgstr "touch: Arkistoa ”%s” ei ole olemassa"
 
 #: ar.c:150
-#, fuzzy, c-format
+#, c-format
 msgid "touch: '%s' is not a valid archive"
-msgstr "touch: \"%s\" ei ole kelvollinen arkisto"
+msgstr "touch: ”%s” ei ole kelvollinen arkisto"
 
 #: ar.c:157
-#, fuzzy, c-format
+#, c-format
 msgid "touch: Member '%s' does not exist in '%s'"
-msgstr "touch: Arkistossa \"%1$s\" ei ole jäsentä \"%2$s\""
+msgstr "touch: Arkistossa ”%1$s” ei ole jäsentä ”%2$s”"
 
 #: ar.c:164
-#, fuzzy, c-format
+#, c-format
 msgid "touch: Bad return code from ar_member_touch on '%s'"
-msgstr "touch: ar_member_touch antoi virheellisen paluuarvon kohteesta \"%s\""
+msgstr "touch: ar_member_touch antoi virheellisen paluuarvon kohteesta ”%s”"
 
-#: arscan.c:124
-#, fuzzy, c-format
+#: arscan.c:130
+#, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
-msgstr "lbr$set_module epäonnistui moduulitietojen noutamisessa, tila = %d"
+msgstr "lbr$set_module() epäonnistui moduulitietojen noutamisessa, tila = %d"
 
-#: arscan.c:230
-#, fuzzy, c-format
+#: arscan.c:236
+#, c-format
 msgid "lbr$ini_control() failed with status = %d"
-msgstr "lbr$ini_control epäonnistui, tila = %d"
+msgstr "lbr$ini_control() epäonnistui, tila = %d"
 
-#: arscan.c:255
+#: arscan.c:261
 #, fuzzy, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "kirjastoa \"%s\" ei voi avata jäsenen \"%s\" etsimiseksi"
+msgstr "kirjastoa ”%s” ei voi avata jäsenen ”%s” etsimiseksi"
 
-#: arscan.c:944
+#: arscan.c:965
 #, fuzzy, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
-msgstr "Jäsen \"%s\"%s: %ld tavua kohdassa %ld (%ld).\n"
+msgstr "Jäsen ”%s”%s: %ld tavua kohdassa %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (nimi voi olla typistynyt)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Päiväys %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, oikeudet = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr ""
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Katkaisu.\n"
 
-#: commands.c:629
-#, fuzzy, c-format
+#: commands.c:627
+#, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
-msgstr "*** [%s] Arkistojäsen \"%s\" voi olla viallinen - ei poisteta"
+msgstr "*** [%s] Arkistojäsen ”%s” voi olla viallinen – ei poisteta"
 
-#: commands.c:633
-#, fuzzy, c-format
+#: commands.c:631
+#, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
-msgstr "*** Arkistojäsen \"%s\" voi olla viallinen - ei poisteta"
+msgstr "*** Arkistojäsen ”%s” voi olla viallinen – ei poisteta"
 
-#: commands.c:647
-#, fuzzy, c-format
+#: commands.c:645
+#, c-format
 msgid "*** [%s] Deleting file '%s'"
-msgstr "*** [%s] Poistetaan tiedosto \"%s\""
+msgstr "*** [%s] Poistetaan tiedosto ”%s”"
 
-#: commands.c:649
-#, fuzzy, c-format
+#: commands.c:647
+#, c-format
 msgid "*** Deleting file '%s'"
-msgstr "*** Poistetaan tiedosto \"%s\""
+msgstr "*** Poistetaan tiedosto ”%s”"
 
-#: commands.c:685
+#: commands.c:683
 #, fuzzy
 msgid "#  recipe to execute"
 msgstr "#  käynnisetttävät komennot"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (sisäänrakennettu):"
 
-#: commands.c:690
-#, fuzzy, c-format
+#: commands.c:688
+#, c-format
 msgid " (from '%s', line %lu):\n"
-msgstr " (tiedostosta \"%s\", rivi %lu):\n"
+msgstr " (tiedosto ”%s”, rivi %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -130,228 +132,224 @@ msgstr ""
 "\n"
 "# Hakemistot\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: tilaa ei voitu lukea.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (avain %s, maika %d): ei voitu avata.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (laite %d, i-solmu [%d,%d,%d]): ei voitu avata.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (laite %ld, i-solmu %ld): ei voitu avata.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (avain %s, maika %d: "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (laite %d, i-solmu [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (laite %ld, i-solmu %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Ei"
 
 # Juuri näin, muodostetaan käännöslause yksittäisistä sanoista...
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " tiedostoa, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "ei"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " mahdottomuutta"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " tähän mennessä."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " mahdottomuutta %lu hakemistossa.\n"
 
 #: expand.c:125
-#, fuzzy, c-format
+#, c-format
 msgid "Recursive variable '%s' references itself (eventually)"
-msgstr "Rekursiivinen muuttuja \"%s\" viittaa (lopulta) itseensä"
+msgstr "Rekursiivinen muuttuja ”%s” viittaa (lopulta) itseensä"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "päättämätön muuttujaviittaus"
 
-#: file.c:271
+#: file.c:278
 #, fuzzy, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
-msgstr "Tiedostolle \"%s\" määriteltiin komentoja paikassa %s:%lu,"
+msgstr "Tiedostolle ”%s” määriteltiin komentoja paikassa %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, fuzzy, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
-msgstr "Tiedostolle \"%s\" löytyi komentoja oletussääntöhaussa,"
+msgstr "Tiedostolle ”%s” löytyi komentoja oletussääntöhaussa,"
 
-#: file.c:280
-#, fuzzy, c-format
+#: file.c:287
+#, c-format
 msgid "but '%s' is now considered the same file as '%s'."
-msgstr "mutta \"%s\":n katsotaan nyt olevan sama tiedosto kuin \"%s\"."
+msgstr "mutta ”%s”:n katsotaan nyt olevan sama tiedosto kuin ”%s”."
 
-#: file.c:283
+#: file.c:290
 #, fuzzy, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ""
-"Tiedoston \"%s\" komentoja ei huomioida, vaan käytetään komentoja "
-"tiedostosta \"%s\"."
+"Tiedoston ”%s” komentoja ei huomioida, vaan käytetään komentoja tiedostosta "
+"”%s”."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr ""
 
-#: file.c:401
-#, fuzzy, c-format
+#: file.c:408
+#, c-format
 msgid "*** Deleting intermediate file '%s'"
-msgstr "*** Poistetaan aputiedosto \"%s\""
+msgstr "*** Poistetaan aputiedosto ”%s”"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Poistetaan aputiedostot...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Tämänhetkinen aika"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Aikaleima ei ole sallitulla välillä, korvataan %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Ei kohde:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Arvokas tiedosto (ennakkoehto .PRECIOUS:ille)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Valekohde (ennakkoehto .PHONY:lle)."
 
-#: file.c:964
-#, fuzzy
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Komentorivikohde."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Oletus-, MAKEFILES- tai -include/sinclude -makefile-tiedosto."
 
-#: file.c:968
-#, fuzzy
+#: file.c:975
 msgid "#  Builtin rule"
-msgstr ""
-"\n"
-"# Ei oletussääntöjä."
+msgstr "#  Sisäänrakennettu sääntö"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Oletussääntöhaku on suoritettu."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Oletussääntöhakua ei ole suoritettu."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr ""
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Tiedosto on välitason ennakkoehto."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Tuotetaan myös:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Muutosaikaa ei koskaan tarkastettu."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Tiedosto ei ole olemassa."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Tiedosto on hyvin vanha."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Viimeksi muutettu %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Tiedosto on päivitetty."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Tiedostoa ei ole päivitetty."
 
-#: file.c:1001
+#: file.c:1008
 #, fuzzy
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Ajossa olevat komennot (TÄMÄ ON OHJELMISTOVIKA)."
 
-#: file.c:1004
+#: file.c:1011
 #, fuzzy
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Ajossa olevat riippuvuuskomennot (TÄMÄ ON OHJELMISTOVIKA)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Päivitetty onnistuneesti."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Vaatii päivitystä (-q on asetettu)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Päivitys epäonnistui."
 
-#: file.c:1025
+#: file.c:1032
 #, fuzzy
 msgid "#  Invalid value in 'command_state' member!"
-msgstr "#  Virheellinen arvo \"command_state\"-jäsenessä!"
+msgstr "#  Virheellinen arvo ”command_state”-jäsenessä!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -359,7 +357,7 @@ msgstr ""
 "\n"
 "# Tiedostot"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -369,139 +367,153 @@ msgstr ""
 "# tilasto tiedostojen hajautustaulusta:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr ""
 
-#: function.c:780
-#, fuzzy
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
-msgstr "ei-numeerinen ensimmäinen argumentti \"word\"-funktiolle"
+msgstr "ei-numeerinen ensimmäinen argumentti ”word”-funktiolle"
 
-#: function.c:785
-#, fuzzy
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
-msgstr "\"word\"-funktion ensimmäisen argumentin on oltava suurempi kuin 0"
+msgstr "”word”-funktion ensimmäisen argumentin on oltava suurempi kuin 0"
 
-#: function.c:805
-#, fuzzy
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
-msgstr "ei-numeerinen ensimmäinen argumentti \"wordlist\"-funktiolle"
+msgstr "ei-numeerinen ensimmäinen argumentti ”wordlist”-funktiolle"
 
-#: function.c:807
-#, fuzzy
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
-msgstr "ei-numeerinen toinen argumentti \"wordlist\"-funktiolle"
+msgstr "ei-numeerinen toinen argumentti ”wordlist”-funktiolle"
 
-#: function.c:1499
+#: function.c:1525
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "create_child_process: DuplicateHandle(In) epäonnistui (v=%d)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "create_child_process: DuplicateHandle(Err) epäonnistui (v=%d)\n"
 
-#: function.c:1530
-#, fuzzy, c-format
+#: function.c:1556
+#, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
-msgstr "CreatePipe() epäonnistui (v=%d)\n"
+msgstr "CreatePipe() epäonnistui (v=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 #, fuzzy
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe (): process_init_fd() epäonnistui\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Siivotaan väliaikainen komentotiedosto %s\n"
 
-#: function.c:2193
-#, fuzzy, c-format
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
+#, c-format
 msgid "open: %s: %s"
-msgstr "%s: %s"
+msgstr "open: %s: %s"
 
-#: function.c:2203
-#, fuzzy, c-format
+#: function.c:2227
+#, c-format
 msgid "write: %s: %s"
-msgstr "kirjoitusvirhe: %s"
+msgstr "write: %s: %s"
 
-#: function.c:2209
-#, c-format
-msgid "Invalid file operation: %s"
+#: function.c:2230 function.c:2267
+#, fuzzy, c-format
+msgid "close: %s: %s"
+msgstr "open: %s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
 msgstr ""
 
-#: function.c:2324
+#: function.c:2262
 #, fuzzy, c-format
-msgid "insufficient number of arguments (%d) to function '%s'"
-msgstr "Liian vähän (%d) argumenttejeja funktiolle \"%s\""
+msgid "read: %s: %s"
+msgstr "write: %s: %s"
 
-#: function.c:2336
+#: function.c:2275
 #, fuzzy, c-format
+msgid "file: invalid file operation: %s"
+msgstr "Virheellinen tiedostotoiminto: %s"
+
+#: function.c:2390
+#, c-format
+msgid "insufficient number of arguments (%d) to function '%s'"
+msgstr "liian vähän (%d) argumentteja funktiolle ”%s”"
+
+#: function.c:2402
+#, c-format
 msgid "unimplemented on this platform: function '%s'"
-msgstr "Ei toteutettu tällä alustalla: funktio \"%s\""
+msgstr "ei toteutettu tällä alustalla: funktio ”%s”"
 
-#: function.c:2399
-#, fuzzy, c-format
+#: function.c:2466
+#, c-format
 msgid "unterminated call to function '%s': missing '%c'"
-msgstr "päättämätön kutsu funktioon \"%s\": puuttuva \"%c\""
+msgstr "päättämätön kutsu funktioon ”%s”: puuttuva ”%c”"
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
-msgstr ""
+msgstr "Tyhjä funktionimi"
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
-msgstr ""
+msgstr "Virheellinen funktionimi: %s"
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
-msgstr ""
+msgstr "Funktionimi on liian pitkä: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "Liian vähän (%d) argumenttejeja funktiolle \"%s\""
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "Virheellinen vähimmäisargumenttimäärä (%d) funktiolle %s"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "Liian vähän (%d) argumenttejeja funktiolle \"%s\""
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "Virheellinen enimmäisargumenttimäärä (%d) funktiolle %s"
 
 #: getopt.c:659
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '%s' is ambiguous\n"
-msgstr "%s: valitsin \"%s\" on moniselitteinen\n"
+msgstr "%s: valitsin ”%s” on moniselitteinen\n"
 
 #: getopt.c:683
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '--%s' doesn't allow an argument\n"
-msgstr "%s: valitsin \"--%s\" ei salli argumenttia\n"
+msgstr "%s: valitsin ”--%s” ei salli argumenttia\n"
 
 #: getopt.c:688
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '%c%s' doesn't allow an argument\n"
-msgstr "%s: valitsin \"%c%s\" ei salli argumenttia\n"
+msgstr "%s: valitsin ”%c%s” ei salli argumenttia\n"
 
 #: getopt.c:705 getopt.c:878
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '%s' requires an argument\n"
-msgstr "%s: valitsin \"%s\" vaatii argumentin\n"
+msgstr "%s: valitsin ”%s” vaatii argumentin\n"
 
 #: getopt.c:734
-#, fuzzy, c-format
+#, c-format
 msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: tunnistamaton valitsin \"--%s\"\n"
+msgstr "%s: tunnistamaton valitsin ”--%s”\n"
 
 #: getopt.c:738
-#, fuzzy, c-format
+#, c-format
 msgid "%s: unrecognized option '%c%s'\n"
-msgstr "%s: tunnistamaton valitsin \"%c%s\"\n"
+msgstr "%s: tunnistamaton valitsin ”%c%s”\n"
 
 #: getopt.c:764
 #, c-format
@@ -519,14 +531,14 @@ msgid "%s: option requires an argument -- %c\n"
 msgstr "%s: valitsin vaatii argumentin -- %c\n"
 
 #: getopt.c:844
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '-W %s' is ambiguous\n"
-msgstr "%s: valitsin \"-W %s\" on moniselitteinen\n"
+msgstr "%s: valitsin ”-W %s” on moniselitteinen\n"
 
 #: getopt.c:862
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '-W %s' doesn't allow an argument\n"
-msgstr "%s: valitsin \"-W %s\" ei salli argumenttia\n"
+msgstr "%s: valitsin ”-W %s” ei salli argumenttia\n"
 
 #: guile.c:58
 #, c-format
@@ -559,155 +571,129 @@ msgid "Collisions=%ld/%ld=%.0f%%"
 msgstr "Törmäykset=%ld/%ld=%.0f%%"
 
 #: implicit.c:38
-#, fuzzy, c-format
+#, c-format
 msgid "Looking for an implicit rule for '%s'.\n"
-msgstr "Etsitään oletussääntöä kohteelle \"%s\".\n"
+msgstr "Etsitään oletussääntöä kohteelle ”%s”.\n"
 
 #: implicit.c:54
-#, fuzzy, c-format
+#, c-format
 msgid "Looking for archive-member implicit rule for '%s'.\n"
-msgstr "Etsitään arkistojäsenen oletussääntöä kohteelle \"%s\".\n"
+msgstr "Etsitään arkistojäsenen oletussääntöä kohteelle ”%s”.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Vältetään oletussääntörekursio.\n"
 
 #: implicit.c:486
 #, c-format
 msgid "Stem too long: '%.*s'.\n"
-msgstr ""
+msgstr "Liian pitkä runko: ”%.*s”.\n"
 
 #: implicit.c:491
-#, fuzzy, c-format
+#, c-format
 msgid "Trying pattern rule with stem '%.*s'.\n"
-msgstr "Kokeillaan hahmosääntöä rungolla \"%.*s\".\n"
+msgstr "Kokeillaan hahmosääntöä rungolla ”%.*s”.\n"
 
 #: implicit.c:697
-#, fuzzy, c-format
+#, c-format
 msgid "Rejecting impossible rule prerequisite '%s'.\n"
-msgstr "Hylätään mahdoton säännön ennakkoehto \"%s\".\n"
+msgstr "Hylätään mahdoton säännön ennakkoehto ”%s”.\n"
 
 #: implicit.c:698
-#, fuzzy, c-format
+#, c-format
 msgid "Rejecting impossible implicit prerequisite '%s'.\n"
-msgstr "Hylätään mahdoton oletusennakkoehto \"%s\".\n"
+msgstr "Hylätään mahdoton oletusennakkoehto ”%s”.\n"
 
 #: implicit.c:711
-#, fuzzy, c-format
+#, c-format
 msgid "Trying rule prerequisite '%s'.\n"
-msgstr "Yritetään käyttää säännön ennakkoehtoa \"%s\".\n"
+msgstr "Yritetään käyttää säännön ennakkoehtoa ”%s”.\n"
 
 #: implicit.c:712
-#, fuzzy, c-format
+#, c-format
 msgid "Trying implicit prerequisite '%s'.\n"
-msgstr "Yritetään käyttää oletusennakkoehtoa \"%s\".\n"
+msgstr "Yritetään käyttää oletusennakkoehtoa ”%s”.\n"
 
 #: implicit.c:751
-#, fuzzy, c-format
+#, c-format
 msgid "Found prerequisite '%s' as VPATH '%s'\n"
-msgstr "Löydettiin ennakkoehto \"%s\", joka on VPATH \"%s\"\n"
+msgstr "Löydettiin ennakkoehto ”%s”, joka on VPATH ”%s”\n"
 
 #: implicit.c:765
-#, fuzzy, c-format
+#, c-format
 msgid "Looking for a rule with intermediate file '%s'.\n"
-msgstr "Etsitään sääntöä aputiedostolla \"%s\".\n"
+msgstr "Etsitään sääntöä aputiedostolla ”%s”.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Väliaikaistiedoston luominen ei onnistu\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (muisti vedostettu)"
 
-#: job.c:488
-#, fuzzy
+#: job.c:490
 msgid " (ignored)"
-msgstr "[%s] Virhe %d (ei huomioida)"
+msgstr " (ei huomioida)"
 
-#: job.c:492 job.c:2046
-#, fuzzy
+#: job.c:494 job.c:1828
 msgid "<builtin>"
-msgstr " (sisäänrakennettu):"
-
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr ""
+msgstr "<sisäänrakennettu>"
 
-#: job.c:516 job.c:524
+#: job.c:510
 #, fuzzy, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "*** [%s] Virhe %d"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s] Virhe %d%s"
 
-#: job.c:519
-#, fuzzy, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "*** [%s] Virhe 0x%x"
-
-#: job.c:529
-#, fuzzy, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s%s: %s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Odotetaan keskeneräisiä töitä...."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr ""
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (etä)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr ""
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr ""
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Siivotaan väliaikainen komentotiedosto %s\n"
 
-#: job.c:855
+#: job.c:845
 #, fuzzy, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Siivotaan väliaikainen komentotiedosto %s\n"
 
-#: job.c:961
+#: job.c:951
 #, fuzzy, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Poistetaan ketjusta lapsiprosessi 0x%08lx PID %ld%s.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr ""
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "työpalvelimen kirjoitus"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, fuzzy, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() epäonnistui prosessin käynnistämisessä (v=%d)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -716,117 +702,111 @@ msgstr ""
 "\n"
 "Laskettiin %d argumenttia epäonnistuneessa käynnistyksessä\n"
 
-#: job.c:1735
+#: job.c:1581
 #, fuzzy, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Lisätään ketjuun lapsiprosessi 0x%08lx (%s) PID %ld%s.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr ""
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "työputken luku"
-
-#: job.c:2056
-#, fuzzy, c-format
+#: job.c:1838
+#, c-format
 msgid "%s: target '%s' does not exist"
-msgstr "touch: Arkistoa \"%s\" ei ole olemassa"
+msgstr "%s: kohde ”%s” ei ole olemassa"
 
-#: job.c:2059
+#: job.c:1841
 #, fuzzy, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr ""
-"%1$s\"%3$s\"-kohteen tarvitseman kohteen \"%2$s\" tuottamiseen ei ole sääntöä"
-"%4$s"
+"%1$s”%3$s”-kohteen tarvitseman kohteen ”%2$s” tuottamiseen ei ole sääntöä%4$s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "kuormarajoja ei voi ottaa käyttöön tässä käyttöjärjestelmässä"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "kuormarajaa ei voi ottaa käyttöön: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
 "tiedostokahvoja ei ole enempää: vakiosyötteen kahdentaminen ei onnistunut\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
 "tiedostokahvoja ei ole enempää: vakiotulosteen kahdentaminen epäonnistui\n"
 
-#: job.c:2278
-#, fuzzy
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
-"tiedostokahvoja ei ole enempää: vakiosyötteen kahdentaminen ei onnistunut\n"
+"tiedostokahvoja ei ole enempää: vakiovirhetulosteen kahdentaminen ei "
+"onnistunut\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Vakiosyötettä ei voitu palauttaa\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Vakiotulostetta ei voitu palauttaa\n"
 
-#: job.c:2309
-#, fuzzy
+#: job.c:2105
 msgid "Could not restore stderr\n"
-msgstr "Vakiosyötettä ei voitu palauttaa\n"
+msgstr "Vakiovirhetulostetta ei voitu palauttaa\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr ""
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
 msgstr "%s: Komentoa ei löytynyt"
 
-#: job.c:2518
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s: Komentoa ei löytynyt"
+
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Kuoriohjelmaa ei löytynyt"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: ympäristötila saattaa olla lopussa"
 
-#: job.c:2765
-#, fuzzy, c-format
+#: job.c:2584
+#, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
-msgstr "$SHELL muuttunut (oli \"%s\", nyt \"%s\")\n"
+msgstr "$SHELL muuttunut (oli ”%s”, nyt ”%s”)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Luodaan väliaikainen komentotiedosto %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
 msgstr ""
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
 "\t%s\n"
 msgstr ""
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (rivi %d) Väärä kuoriympäristö (!unixy && !batch_mode_shell)\n"
@@ -855,30 +835,30 @@ msgstr ""
 msgid "Empty symbol name for load: %s"
 msgstr ""
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr ""
 
-#: load.c:244
+#: load.c:256
 #, fuzzy
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Rinnakkaiset työt (-j) eivät ole tuettuja tällä alustalla."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Valitsimet:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr ""
 "  -b, -m                      Yhteensopivuuden vuoksi jätetään huomiotta.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make           Tuota kaikki kohteet ehdoitta.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -886,16 +866,16 @@ msgstr ""
 "  -C HAKEMISTO, --directory=HAKEMISTO\n"
 "                              Siirry HAKEMISTOon ennen jatkamista.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          Näytä runsaasti vianetsintätietoja.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr "  --debug[=LIPUT]             Näytä monenlaisia vianetsintätietoja.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -904,12 +884,12 @@ msgstr ""
 "                              Ympäristömuuttujat kumoavat makefile-"
 "tiedostot.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -917,18 +897,18 @@ msgstr ""
 "  -f TIEDOSTO, --file=TIEDOSTO, --makefile=TIEDOSTO\n"
 "                              Käytä TIEDOSTOa makefile-tiedostona.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Näytä tämä viesti ja poistu.\n"
 
-#: main.c:335
+#: main.c:360
 #, fuzzy
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 "  -i, --ignore-errors         Älä huomioi suoritettujen komentojen "
 "virheitä.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -937,7 +917,7 @@ msgstr ""
 "                              Etsi sisällytettäviä makefile:ja "
 "HAKEMISTOsta.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -945,14 +925,14 @@ msgstr ""
 "  -j [N], --jobs[=N]          Salli N yhtäaikaista työtä; ilman N:ää "
 "ääretön.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Jatka vaikka joidenkin kohteiden tuottaminen\n"
 "                                epäonnistuisi.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -962,7 +942,7 @@ msgstr ""
 "                              Älä aloita useita töitä ellei kuormitus alle "
 "N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -970,7 +950,7 @@ msgstr ""
 "  -L, --check-symlink-times   Käytä uusinta mtime-aikaa symlinkkien ja\n"
 "                                kohteen välillä.\n"
 
-#: main.c:349
+#: main.c:374
 #, fuzzy
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
@@ -981,7 +961,7 @@ msgstr ""
 "                              Näytä ajettavat komennot, älä käynnistä "
 "niitä.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -990,17 +970,17 @@ msgstr ""
 "  -o TIEDOSTO, --old-file=TIEDOSTO, --assume-old=TIEDOSTO\n"
 "                              Käsittele TIEDOSTO vanhana, älä tuota sitä.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       Näytä make:in sisäinen tietokanta.\n"
 
-#: main.c:360
+#: main.c:385
 #, fuzzy
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
@@ -1009,22 +989,22 @@ msgstr ""
 "  -q, --question              Älä aja komentoja; paluuarvo kertoo ajan-\n"
 "                                tasaisuuden.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Poista käytöstä sisäiset oletussäännöt.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables  Poista käytöstä sisäiset muuttuja-asetukset.\n"
 
-#: main.c:366
+#: main.c:391
 #, fuzzy
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Älä kaiuta komentoja.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1032,25 +1012,25 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Kumoaa valitsimen -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr "  -t, --touch                 Kosketa kohteita tuottamisen sijaan.\n"
 
-#: main.c:373
+#: main.c:398
 #, fuzzy
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  -d                          Näytä runsaasti vianetsintätietoja.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr "  -v, --version               Näytä make:in versionumero ja poistu.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Näytä nykyinen hakemisto.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1058,7 +1038,7 @@ msgstr ""
 "  --no-print-directory        Kumoa -w, vaikka se olisi käytössä "
 "oletuksena.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1067,7 +1047,7 @@ msgstr ""
 "new=TIEDOSTO\n"
 "                              Käsittele TIEDOSTO aina uutena.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1075,26 +1055,26 @@ msgstr ""
 "  --warn-undefined-variables  Varoita viittauksista määrittelemättömiin\n"
 "                                muuttujiin.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "tyhjä merkkijono ei kelpaa tiedostonimeksi"
 
-#: main.c:737
-#, fuzzy, c-format
+#: main.c:766
+#, c-format
 msgid "unknown debug level specification '%s'"
-msgstr "tuntematon vianetsintätason määritys \"%s\""
+msgstr "tuntematon vianetsintätason määritys ”%s”"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr ""
 
-#: main.c:828
+#: main.c:861
 #, fuzzy, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: Keskeytys/poikkeus siepattu (koodi = 0x%x, osoite = 0x%x)\n"
 
-#: main.c:835
+#: main.c:868
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -1109,182 +1089,139 @@ msgstr ""
 "Poikkeusliput = %x\n"
 "Poikkeusosoite = %x\n"
 
-#: main.c:843
+#: main.c:876
 #, fuzzy, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Suojausvirhe: kirjoitusoperaatio osoitteeseen %x\n"
 
-#: main.c:844
+#: main.c:877
 #, fuzzy, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Suojausvirhe: lukuoperaatio osoitteeseen %x\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, fuzzy, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell asettaa default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, fuzzy, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "find_and_set_shell: polkuhaku asetti default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s keskeytyy 30 sekunniksi..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "sleep(30) valmis. Jatketaan.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr ""
-
-#: main.c:1534
-#, fuzzy, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "sisäinen virhe: virheellinen --jobserver-fds -merkkijono \"%s\""
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr ""
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr "varoitus: -jN pakotettu ali-make:ssa: poistetaan työpalvelin käytöstä."
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "kaksinkertainen työpalvelin"
-
-#: main.c:1570
+#: main.c:1627
 #, fuzzy
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
-"varoitus: työpalvelin ei käytettävissä: käytetään -j1. Lisää \"+\" ylemmän "
+"varoitus: työpalvelin ei käytettävissä: käytetään -j1. Lisää ”+” ylemmän "
 "tason make-sääntöön."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr "varoitus: -jN pakotettu ali-make:ssa: poistetaan työpalvelin käytöstä."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefile-tiedosto vakiosyötteestä määritelty kahdesti."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (väliaikaistiedosto)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (väliaikaistiedosto)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Rinnakkaiset työt (-j) eivät ole tuettuja tällä alustalla."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Palataan yhden työn (-j1) tilaan."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr ""
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "luodaan työputki"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "alustetaan työpalvelimen putki"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Ei tukea symbolisille linkeille: poistetaan -L käytöstä."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Päivitetään makefile-tiedostoja....\n"
 
-#: main.c:2158
-#, fuzzy, c-format
+#: main.c:2195
+#, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr ""
-"Ei uudelleentuoteta makefile-tiedostoa \"%s\" - vältetään mahdollinen "
-"ikuinen silmukka.\n"
+"Ei uudelleentuoteta makefile-tiedostoa ”%s” – vältetään mahdollinen ikuinen "
+"silmukka.\n"
 
-#: main.c:2237
-#, fuzzy, c-format
+#: main.c:2283
+#, c-format
 msgid "Failed to remake makefile '%s'."
-msgstr "Makefile-tiedoston \"%s\" uudelleentuottaminen epäonnistui."
+msgstr "Makefile-tiedoston ”%s” uudelleentuottaminen epäonnistui."
 
-#: main.c:2257
+#: main.c:2303
 #, fuzzy, c-format
 msgid "Included makefile '%s' was not found."
-msgstr "Sisällytettyä makefile-tiedostoa \"%s\" ei löytynyt."
+msgstr "Sisällytettyä makefile-tiedostoa ”%s” ei löytynyt."
 
-#: main.c:2262
-#, fuzzy, c-format
+#: main.c:2308
+#, c-format
 msgid "Makefile '%s' was not found"
-msgstr "Makefile-tiedostoa \"%s\" ei löytynyt"
+msgstr "Makefile-tiedostoa ”%s” ei löytynyt"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Ei voitu siirtyä takaisin alkuperäiseen hakemistoon."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Uudelleenkäynnistetään[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (väliaikaistiedosto): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL sisältää yli yhden kohteen"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Kohteita ei ole annettu, eikä makefileä löytynyt"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Ei kohteita"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr ""
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "varoitus: Havaittu väärä kellonaika. Käännösversio saattaa olla "
 "epätäydellinen."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Käyttö: %s [valitsimet] [kohde] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1293,7 +1230,7 @@ msgstr ""
 "\n"
 "Tämä ohjelma on käännetty järjestelmälle %s.\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1302,37 +1239,37 @@ msgstr ""
 "\n"
 "Tämä ohjelma on käännetty järjestelmälle %s (%s).\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr ""
 "Ilmoita ohjelmistovioista (englanniksi) osoitteeseen <bug-make@gnu.org>.\n"
 
-#: main.c:2807
-#, fuzzy, c-format
+#: main.c:2869
+#, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
-msgstr "valitsin \"-%c\" vaatii ei-tyhjän merkkijonoargumentin"
+msgstr "valitsin ”%s%s” vaatii ei-tyhjän merkkijonoargumentin"
 
-#: main.c:2871
-#, fuzzy, c-format
+#: main.c:2933
+#, c-format
 msgid "the '-%c' option requires a positive integer argument"
-msgstr "valitsin \"-%c\" vaatii positiivisen kokonaislukuargumentin"
+msgstr "valitsin ”-%c” vaatii positiivisen kokonaislukuargumentin"
 
-#: main.c:3269
+#: main.c:3331
 #, fuzzy, c-format
 msgid "%sBuilt for %s\n"
 msgstr ""
 "\n"
 "%sTämä ohjelma on käännetty järjestelmälle %s.\n"
 
-#: main.c:3271
+#: main.c:3333
 #, fuzzy, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr ""
 "\n"
 "%sTämä ohjelma on käännetty järjestelmälle %s (%s).\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1341,7 +1278,7 @@ msgid ""
 "%sThere is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1350,7 +1287,7 @@ msgstr ""
 "\n"
 "# Make-tietokanta, tulostettu %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1359,29 +1296,29 @@ msgstr ""
 "\n"
 "# Make-tietokanta saatu valmiiksi %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Tuntematon virhe %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: käyttäjä %lu (todellinen %lu), ryhmä %lu (todellinen %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Alkuperäiset käyttöoikeudet"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Käyttäjän käyttöoikeudet"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Make-prosessin käyttöoikeudet"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Lapsiprosessin käyttöoikeudet"
 
@@ -1396,14 +1333,14 @@ msgid "%s: Leaving an unknown directory\n"
 msgstr "%s: Poistutaan tuntemattomasta hakemistosta\n"
 
 #: output.c:109
-#, fuzzy, c-format
+#, c-format
 msgid "%s: Entering directory '%s'\n"
-msgstr "%s: Siirrytään hakemistoon \"%s\"\n"
+msgstr "%s: Siirrytään hakemistoon ”%s”\n"
 
 #: output.c:111
-#, fuzzy, c-format
+#, c-format
 msgid "%s: Leaving directory '%s'\n"
-msgstr "%s: Poistutaan hakemistosta \"%s\"\n"
+msgstr "%s: Poistutaan hakemistosta ”%s”\n"
 
 #: output.c:115
 #, c-format
@@ -1416,19 +1353,18 @@ msgid "%s[%u]: Leaving an unknown directory\n"
 msgstr "%s[%u]: Poistutaan tuntemattomasta hakemistosta\n"
 
 #: output.c:120
-#, fuzzy, c-format
+#, c-format
 msgid "%s[%u]: Entering directory '%s'\n"
-msgstr "%s[%u]: Siirrytään hakemistoon \"%s\"\n"
+msgstr "%s[%u]: Siirrytään hakemistoon ”%s”\n"
 
 #: output.c:122
-#, fuzzy, c-format
+#, c-format
 msgid "%s[%u]: Leaving directory '%s'\n"
-msgstr "%s[%u]: Poistutaan hakemistosta \"%s\"\n"
+msgstr "%s[%u]: Poistutaan hakemistosta ”%s”\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "kirjoitusvirhe: %s"
+msgstr "kirjoitusvirhe: vakiotuloste"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1444,383 +1380,417 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "luodaan työputki"
+
+#: posixos.c:72 posixos.c:227
+#, fuzzy
+msgid "duping jobs pipe"
+msgstr "luodaan työputki"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "alustetaan työpalvelimen putki"
+
+#: posixos.c:90
+#, fuzzy, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "sisäinen virhe: virheellinen --jobserver-fds -merkkijono ”%s”"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr ""
+
+#: posixos.c:109
+#, fuzzy
+msgid "jobserver pipeline"
+msgstr "alustetaan työpalvelimen putki"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "työpalvelimen kirjoitus"
+
+#: posixos.c:268
+#, fuzzy
+msgid "pselect jobs pipe"
+msgstr "työputken luku"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "työputken luku"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Luetaan makefile-tiedostoja...\n"
 
-#: read.c:335
-#, fuzzy, c-format
+#: read.c:329
+#, c-format
 msgid "Reading makefile '%s'"
-msgstr "Luetaan makefile-tiedosto \"%s\""
+msgstr "Luetaan makefile-tiedosto ”%s”"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr ""
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (hakupolku)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (ei välitetä)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (ei ~-laajennusta)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr ""
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr ""
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "virheellinen syntaksi ehtolauseessa"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr ""
 
-#: read.c:992
+#: read.c:985
 #, fuzzy
 msgid "recipe commences before first target"
 msgstr "komennot alkavat ennen ensimmäistä kohdetta"
 
-#: read.c:1041
+#: read.c:1034
 #, fuzzy
 msgid "missing rule before recipe"
 msgstr "puuttuva sääntö ennen komentoja"
 
-#: read.c:1131
+#: read.c:1124
 #, fuzzy
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr " (ehkä tarkoitit sarkainta eikä kahdeksaa välilyöntiä?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "puuttuva erotin%s"
+msgstr "puuttuva erotin"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "puuttuva kohdehahmo"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "useita kohdehahmoja"
 
-#: read.c:1276
-#, fuzzy, c-format
+#: read.c:1268
+#, c-format
 msgid "target pattern contains no '%%'"
-msgstr "kohdehahmo ei sisällä %%-merkkiä"
+msgstr "kohdehahmo ei sisällä ”%%”-merkkiä"
 
-#: read.c:1398
-#, fuzzy
+#: read.c:1390
 msgid "missing 'endif'"
-msgstr "puuttuva \"endif\""
+msgstr "puuttuva ”endif”"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "tyhjä muuttujan nimi"
 
-#: read.c:1471
-#, fuzzy
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
-msgstr "Ylimääräistä tekstiä \"endef\"-toimintaohjeen jälkeen"
+msgstr "ylimääräistä tekstiä ”endef”-toimintaohjeen jälkeen"
 
-#: read.c:1496
-#, fuzzy
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
-msgstr "puuttuva \"endef\", päättämätön \"define\""
+msgstr "puuttuva ”endef”, päättämätön ”define”"
 
-#: read.c:1524
-#, fuzzy
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
-msgstr "Ylimääräistä tekstiä \"endef\"-toimintaohjeen jälkeen"
+msgstr "ylimääräistä tekstiä ”endef”-toimintaohjeen jälkeen"
 
-#: read.c:1595
-#, fuzzy, c-format
+#: read.c:1588
+#, c-format
 msgid "extraneous text after '%s' directive"
-msgstr "Ylimääräistä tekstiä \"%s\"-toimintaohjeen jälkeen"
+msgstr "ylimääräistä tekstiä ”%s”-toimintaohjeen jälkeen"
 
-#: read.c:1596
-#, fuzzy, c-format
+#: read.c:1589
+#, c-format
 msgid "extraneous '%s'"
-msgstr "ylimääräinen \"%s\""
+msgstr "ylimääräinen ”%s”"
 
-#: read.c:1624
-#, fuzzy
+#: read.c:1617
 msgid "only one 'else' per conditional"
-msgstr "vain yksi \"else\" ehtolausetta kohden"
+msgstr "vain yksi ”else” ehtolausetta kohden"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Väärin muotoiltu kohdekohtainen muuttujamäärittely"
 
 # skripti?
-#: read.c:1957
+#: read.c:1950
 #, fuzzy
 msgid "prerequisites cannot be defined in recipes"
 msgstr "ennakkoehtoja ei voi määritellä komentoskripteissä"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr ""
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr ""
 
-#: read.c:2091
-#, fuzzy, c-format
+#: read.c:2085
+#, c-format
 msgid "target '%s' doesn't match the target pattern"
-msgstr "kohde \"%s\" ei täsmää kohdehahmon kanssa"
+msgstr "kohde ”%s” ei täsmää kohdehahmon kanssa"
 
-#: read.c:2106 read.c:2152
-#, fuzzy, c-format
+#: read.c:2100 read.c:2146
+#, c-format
 msgid "target file '%s' has both : and :: entries"
-msgstr "kohdetiedostolla \"%s\" on sekä :- että ::-merkinnät"
+msgstr "kohdetiedostolla ”%s” on sekä :- että ::-merkinnät"
 
-#: read.c:2112
-#, fuzzy, c-format
+#: read.c:2106
+#, c-format
 msgid "target '%s' given more than once in the same rule"
-msgstr "kohde \"%s\" annettu yli yhden kerran samassa säännössä."
+msgstr "kohde ”%s” annettu yli yhden kerran samassa säännössä"
 
-#: read.c:2122
+#: read.c:2116
 #, fuzzy, c-format
 msgid "warning: overriding recipe for target '%s'"
-msgstr "varoitus: syrjäytetään kohteen \"%s\" komennot"
+msgstr "varoitus: syrjäytetään kohteen ”%s” komennot"
 
-#: read.c:2125
+#: read.c:2119
 #, fuzzy, c-format
 msgid "warning: ignoring old recipe for target '%s'"
-msgstr "varoitus: ei huomioida vanhoja komentoja kohteelle \"%s\""
+msgstr "varoitus: ei huomioida vanhoja komentoja kohteelle ”%s”"
 
-#: read.c:2229
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr ""
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "varoitus: havaittu NUL-merkki, rivin loppuosaa ei huomioida"
 
-#: remake.c:230
-#, fuzzy, c-format
+#: remake.c:225
+#, c-format
 msgid "Nothing to be done for '%s'."
-msgstr "Kohteelle \"%s\" ei tarvitse tehdä mitään."
+msgstr "Kohteelle ”%s” ei tarvitse tehdä mitään."
 
-#: remake.c:231
-#, fuzzy, c-format
+#: remake.c:226
+#, c-format
 msgid "'%s' is up to date."
-msgstr "\"%s\" on ajan tasalla."
+msgstr "”%s” on ajan tasalla."
 
-#: remake.c:303
-#, fuzzy, c-format
+#: remake.c:322
+#, c-format
 msgid "Pruning file '%s'.\n"
-msgstr "Karsitaan tiedosto \"%s\".\n"
+msgstr "Karsitaan tiedosto ”%s”.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr ""
-"%1$s\"%3$s\"-kohteen tarvitseman kohteen \"%2$s\" tuottamiseen ei ole sääntöä"
-"%4$s"
+"%1$s”%3$s”-kohteen tarvitseman kohteen ”%2$s” tuottamiseen ei ole sääntöä%4$s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s'%s"
-msgstr "%sKohteen \"%s\" tuottamiseen ei ole sääntöä%s"
+msgstr "%sKohteen ”%s” tuottamiseen ei ole sääntöä%s"
 
-#: remake.c:426
-#, fuzzy, c-format
+#: remake.c:441
+#, c-format
 msgid "Considering target file '%s'.\n"
-msgstr "Tarkastellaan tiedostoa \"%s\".\n"
+msgstr "Tarkastellaan kohdetiedostoa ”%s”.\n"
 
-#: remake.c:433
-#, fuzzy, c-format
+#: remake.c:448
+#, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
-msgstr "Tiedoston \"%s\" päivitysyritys epäonnistui äskettäin.\n"
+msgstr "Tiedoston ”%s” päivitysyritys epäonnistui äskettäin.\n"
 
-#: remake.c:445
-#, fuzzy, c-format
+#: remake.c:460
+#, c-format
 msgid "File '%s' was considered already.\n"
-msgstr "Tiedostoa \"%s\" on jo tarkasteltu.\n"
+msgstr "Tiedostoa ”%s” on jo tarkasteltu.\n"
 
-#: remake.c:455
-#, fuzzy, c-format
+#: remake.c:470
+#, c-format
 msgid "Still updating file '%s'.\n"
-msgstr "Päivitetään edelleen tiedostoa \"%s\".\n"
+msgstr "Päivitetään edelleen tiedostoa ”%s”.\n"
 
-#: remake.c:458
-#, fuzzy, c-format
+#: remake.c:473
+#, c-format
 msgid "Finished updating file '%s'.\n"
-msgstr "Tiedosto \"%s\" päivitetty.\n"
+msgstr "Tiedoston ”%s” päivitys valmistui.\n"
 
-#: remake.c:487
-#, fuzzy, c-format
+#: remake.c:502
+#, c-format
 msgid "File '%s' does not exist.\n"
-msgstr "Tiedosto \"%s\" ei ole olemassa.\n"
+msgstr "Tiedosto ”%s” ei ole olemassa.\n"
 
-#: remake.c:495
-#, fuzzy, c-format
+#: remake.c:510
+#, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
 msgstr ""
-"*** Varoitus: .LOW_RESOLUTION_TIME-tiedostolla \"%s\" on "
-"korkearesoluutioinen aikaleima"
+"*** Varoitus: .LOW_RESOLUTION_TIME-tiedostolla ”%s” on korkearesoluutioinen "
+"aikaleima"
 
-#: remake.c:508 remake.c:1040
-#, fuzzy, c-format
+#: remake.c:523 remake.c:1055
+#, c-format
 msgid "Found an implicit rule for '%s'.\n"
-msgstr "Kohteelle \"%s\" löytyi oletussääntö.\n"
+msgstr "Kohteelle ”%s” löytyi oletussääntö.\n"
 
-#: remake.c:510 remake.c:1042
-#, fuzzy, c-format
+#: remake.c:525 remake.c:1057
+#, c-format
 msgid "No implicit rule found for '%s'.\n"
-msgstr "Kohteelle \"%s\" ei löytynyt oletussääntöä.\n"
+msgstr "Kohteelle ”%s” ei löytynyt oletussääntöä.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, fuzzy, c-format
 msgid "Using default recipe for '%s'.\n"
-msgstr "Käytetään oletuskomentoja kohteelle \"%s\".\n"
+msgstr "Käytetään oletuskomentoja kohteelle ”%s”.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Kehäriippuvuus %s <- %s hylätty."
 
-#: remake.c:675
-#, fuzzy, c-format
+#: remake.c:690
+#, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
-msgstr "Kohdetiedoston \"%s\" ennakkoehdot täytetty.\n"
+msgstr "Kohdetiedoston ”%s” ennakkoehdot täytetty.\n"
 
-#: remake.c:681
-#, fuzzy, c-format
+#: remake.c:696
+#, c-format
 msgid "The prerequisites of '%s' are being made.\n"
-msgstr "Kohteen \"%s\" ennakkoehtoja täytetään.\n"
+msgstr "Kohteen ”%s” ennakkoehtoja täytetään.\n"
 
-#: remake.c:695
-#, fuzzy, c-format
+#: remake.c:710
+#, c-format
 msgid "Giving up on target file '%s'.\n"
-msgstr "Luovutaan kohdetiedostosta \"%s\".\n"
+msgstr "Luovutaan kohdetiedostosta ”%s”.\n"
 
-#: remake.c:700
-#, fuzzy, c-format
+#: remake.c:715
+#, c-format
 msgid "Target '%s' not remade because of errors."
-msgstr "Kohdetta \"%s\" ei tuotettu uudelleen virheiden vuoksi."
+msgstr "Kohdetta ”%s” ei tuotettu uudelleen virheiden vuoksi."
 
-#: remake.c:752
+#: remake.c:767
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
-msgstr "Ennakkoehto \"%s\" on vanhempi kuin kohde \"%s\".\n"
+msgstr "Ennakkoehto ”%s” on vanhempi kuin kohde ”%s”.\n"
 
-#: remake.c:757
-#, fuzzy, c-format
+#: remake.c:772
+#, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
-msgstr "Kohteen \"%2$s\" ennakkoehto \"%1$s\" ei ole olemassa.\n"
+msgstr "Kohteen ”%2$s” ennakkoehto ”%1$s” ei ole olemassa.\n"
 
-#: remake.c:762
-#, fuzzy, c-format
+#: remake.c:777
+#, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
-msgstr "Ennakkoehto \"%s\" on uudempi kuin kohde \"%s\".\n"
+msgstr "Ennakkoehto ”%s” on uudempi kuin kohde ”%s”.\n"
 
-#: remake.c:765
-#, fuzzy, c-format
+#: remake.c:780
+#, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
-msgstr "Ennakkoehto \"%s\" on vanhempi kuin kohde \"%s\".\n"
+msgstr "Ennakkoehto ”%s” on vanhempi kuin kohde ”%s”.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr ""
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr ""
 
-#: remake.c:795
-#, fuzzy, c-format
+#: remake.c:810
+#, c-format
 msgid "Making '%s' due to always-make flag.\n"
-msgstr "Tuotetaan \"%s\", koska --always-make -valitsin on käytössä.\n"
+msgstr "Tuotetaan ”%s”, koska always-make-lippu on käytössä.\n"
 
-#: remake.c:803
-#, fuzzy, c-format
+#: remake.c:818
+#, c-format
 msgid "No need to remake target '%s'"
-msgstr "Ei tarvetta uudelleentuottaa kohdetta \"%s\""
+msgstr "Ei tarvetta uudelleentuottaa kohdetta ”%s”"
 
-#: remake.c:805
-#, fuzzy, c-format
+#: remake.c:820
+#, c-format
 msgid "; using VPATH name '%s'"
-msgstr "; käytetään VPATH-nimeä \"%s\""
+msgstr "; käytetään VPATH-nimeä ”%s”"
 
-#: remake.c:825
-#, fuzzy, c-format
+#: remake.c:840
+#, c-format
 msgid "Must remake target '%s'.\n"
-msgstr "Kohde \"%s\" on tuotettava uudelleen.\n"
+msgstr "Kohde ”%s” on tuotettava uudelleen.\n"
 
-#: remake.c:831
-#, fuzzy, c-format
+#: remake.c:846
+#, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
-msgstr "  Ei huomioida VPATH-nimeä \"%s\".\n"
+msgstr "  Ei huomioida VPATH-nimeä ”%s”.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr ""
 
-#: remake.c:847
-#, fuzzy, c-format
+#: remake.c:862
+#, c-format
 msgid "Failed to remake target file '%s'.\n"
-msgstr "Kohdetiedoston \"%s\" uudelleentuottaminen epäonnistui.\n"
+msgstr "Kohdetiedoston ”%s” uudelleentuottaminen epäonnistui.\n"
 
-#: remake.c:850
-#, fuzzy, c-format
+#: remake.c:865
+#, c-format
 msgid "Successfully remade target file '%s'.\n"
-msgstr "Kohdetiedosto \"%s\" uudelleentuotettiin onnistuneesti.\n"
+msgstr "Kohdetiedosto ”%s” uudelleentuotettiin onnistuneesti.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr ""
 
-#: remake.c:1048
-#, fuzzy, c-format
+#: remake.c:1063
+#, c-format
 msgid "Using default commands for '%s'.\n"
-msgstr "Käytetään oletuskomentoja kohteelle \"%s\".\n"
+msgstr "Käytetään oletuskomentoja kohteelle ”%s”.\n"
 
-#: remake.c:1397
-#, fuzzy, c-format
+#: remake.c:1429
+#, c-format
 msgid "Warning: File '%s' has modification time in the future"
-msgstr "Varoitus: Tiedoston \"%s\" muutosaika on tulevaisuudessa"
+msgstr "Varoitus: Tiedoston ”%s” muutosaika on tulevaisuudessa"
 
-#: remake.c:1411
-#, fuzzy, c-format
+#: remake.c:1443
+#, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
-msgstr "Varoitus: Tiedoston \"%s\" muutosaika on %.2g sekuntia tulevaisuudessa"
+msgstr "Varoitus: Tiedoston ”%s” muutosaika on %s sekuntia tulevaisuudessa"
 
-#: remake.c:1610
-#, fuzzy, c-format
+#: remake.c:1646
+#, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
-msgstr ".LIBPATTERNS-elementti \"%s\" ei ole hahmo"
+msgstr ".LIBPATTERNS-elementti ”%s” ei ole hahmo"
 
 #: remote-cstms.c:122
 #, c-format
 msgid "Customs won't export: %s\n"
 msgstr ""
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1828,7 +1798,7 @@ msgstr ""
 "\n"
 "# Oletussäännöt"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1836,7 +1806,7 @@ msgstr ""
 "\n"
 "# Ei oletussääntöjä."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1845,14 +1815,14 @@ msgstr ""
 "\n"
 "# %u oletussääntöä, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr ""
 
-#: rule.c:530
-#, fuzzy, c-format
+#: rule.c:531
+#, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
-msgstr "VIKA: num_pattern_rules väärä! %u != %u"
+msgstr "VIKA: num_pattern_rules on väärä! %u != %u"
 
 #: signame.c:84
 msgid "unknown signal"
@@ -2010,14 +1980,14 @@ msgstr "Tietopyyntö"
 msgid "Floating point co-processor not available"
 msgstr "Käytettävissä ei ole liukulukusuoritinta"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
 msgstr ""
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2025,79 +1995,76 @@ msgid ""
 "B\n"
 msgstr ""
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr ""
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
 "%s strcache performance: lookups = %lu / hit rate = %lu%%\n"
 msgstr ""
 
-#: strcache.c:289
-#, fuzzy
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
 msgstr ""
-"\n"
 "# tilasto tiedostojen hajautustaulusta:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automaattinen"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "oletus"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "ympäristö"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "-e:n alainen ympäristö"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "komentorivi"
 
-#: variable.c:1617
-#, fuzzy
+#: variable.c:1647
 msgid "'override' directive"
-msgstr "\"override\"-toimintaohje"
+msgstr "”override”-toimintaohje"
 
-#: variable.c:1628
-#, fuzzy, c-format
+#: variable.c:1658
+#, c-format
 msgid " (from '%s', line %lu)"
-msgstr " (tiedostosta \"%s\", rivi %lu)"
+msgstr " (tiedosto ”%s”, rivi %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# muuttujajoukon hajautustaulutilastot:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2105,7 +2072,7 @@ msgstr ""
 "\n"
 "# Muuttujat\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2113,7 +2080,7 @@ msgstr ""
 "\n"
 "# Hahmokohtaisia muuttujien arvoja"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2121,7 +2088,7 @@ msgstr ""
 "\n"
 "# Ei hahmokohtaisia muuttuja-arvoja."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2131,97 +2098,47 @@ msgstr ""
 "# %u hahmokohtaista muuttuja-arvoa"
 
 #: variable.h:224
-#, fuzzy, c-format
+#, c-format
 msgid "warning: undefined variable '%.*s'"
-msgstr "varoitus: määrittelemätön muuttuja \"%.*s\""
+msgstr "varoitus: määrittelemätön muuttuja ”%.*s”"
 
 #: vmsfunctions.c:91
 #, fuzzy, c-format
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search epäonnistui, arvo %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Varoitus: Tyhjä uudelleenohjaus\n"
-
-#: vmsjobs.c:183
-#, fuzzy, c-format
-msgid "internal error: '%s' command_state"
-msgstr "sisäinen virhe: \"%s\" command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 "-varoitus, Ctrl-Y-käsittely on ehkä otettava uudelleen käyttöön DCL:stä.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "SISÄÄNRAKENNETTU [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "SISÄÄNRAKENNETTU CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "SISÄÄNRAKENNETTU CD %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Tuntematon sisäänrakennettu komento \"%s\"\n"
-
-#: vmsjobs.c:592
+#: vmsjobs.c:1228
 #, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Virhe, tyhjä komento\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Syöte uudelleenohjattu kohteesta %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Virhetuloste uudelleenohjattu kohteeseen %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, fuzzy, c-format
 msgid "Append output to %s\n"
 msgstr "Tuloste uudelleenohjattu kohteeseen %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Tuloste uudelleenohjattu kohteeseen %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr ""
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Käynnistetään sen sijaan %s\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Virhe käynnistyksessä, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2229,42 +2146,110 @@ msgstr ""
 "\n"
 "# VPATH-hakupolut\n"
 
-#: vpath.c:600
-#, fuzzy
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
-msgstr "# Ei \"vpath\"-hakupolkuja."
+msgstr "# Ei ”vpath”-hakupolkuja."
 
-#: vpath.c:602
-#, fuzzy, c-format
+#: vpath.c:622
+#, c-format
 msgid ""
 "\n"
 "# %u 'vpath' search paths.\n"
 msgstr ""
 "\n"
-"# %u \"vpath\"-hakupolkua.\n"
+"# %u ”vpath”-hakupolkua.\n"
 
-#: vpath.c:605
-#, fuzzy
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
 msgstr ""
 "\n"
-"# Ei yleistä (\"VPATH\"-muuttuja) hakupolkua."
+"# Ei yleistä (”VPATH”-muuttuja) hakupolkua."
 
-#: vpath.c:611
-#, fuzzy
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
 "# "
 msgstr ""
 "\n"
-"# Yleinen (\"VPATH\"-muuttuja) hakupolku:\n"
+"# Yleinen (”VPATH”-muuttuja) hakupolku:\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr ""
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr ""
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr ""
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] Virhe 0x%x%s"
+
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
+#~ msgid "dup jobserver"
+#~ msgstr "kaksinkertainen työpalvelin"
+
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Varoitus: Tyhjä uudelleenohjaus\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "sisäinen virhe: ”%s” command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "SISÄÄNRAKENNETTU [%s][%s]\n"
+
+#, fuzzy
+#~ msgid "BUILTIN ECHO %s->%s\n"
+#~ msgstr "SISÄÄNRAKENNETTU CD %s\n"
+
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Tuntematon sisäänrakennettu komento ”%s”\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Virhe, tyhjä komento\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Syöte uudelleenohjattu kohteesta %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Virhetuloste uudelleenohjattu kohteeseen %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Tuloste uudelleenohjattu kohteeseen %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Virhe käynnistyksessä, %d\n"
+
 #~ msgid "#  Invalid value in `update_status' member!"
-#~ msgstr "#  Virheellinen arvo \"update_status\"-jäsenessä!"
+#~ msgstr "#  Virheellinen arvo ”update_status”-jäsenessä!"
 
 #~ msgid "*** [%s] Error 0x%x (ignored)"
 #~ msgstr "*** [%s] Virhe 0x%x (ei huomioida)"
@@ -2294,13 +2279,13 @@ msgstr ""
 #~ msgstr "kirjoitusvirhe"
 
 #~ msgid "extraneous `endef'"
-#~ msgstr "ylimääräinen \"endef\""
+#~ msgstr "ylimääräinen ”endef”"
 
 #~ msgid "empty `override' directive"
-#~ msgstr "tyhjä \"override\"-toimintaohje"
+#~ msgstr "tyhjä ”override”-toimintaohje"
 
 #~ msgid "invalid `override' directive"
-#~ msgstr "virheellinen \"override\"-toimintaohje"
+#~ msgstr "virheellinen ”override”-toimintaohje"
 
 #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n"
 #~ msgstr "-varoitus, Ctrl-Y jättää aliprosessi(n/t) käyntiin.\n"
@@ -2308,5 +2293,5 @@ msgstr ""
 #~ msgid "BUILTIN RM %s\n"
 #~ msgstr "SISÄÄNRAKENNETTU RM %s\n"
 
-#~ msgid "Syntax error, still inside '\"'\n"
-#~ msgstr "Syntaksivirhe, edelleen \":n sisällä\n"
+#~ msgid "Syntax error, still inside ''\n"
+#~ msgstr "Syntaksivirhe, edelleen :n sisällä\n"
index 095850c..8995dc1 100644 (file)
Binary files a/po/fr.gmo and b/po/fr.gmo differ
index 287bb62..eb0a355 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -6,15 +6,15 @@
 # Marc Baudoin <babafou@ensta.fr>, Frédéric Liné <line@MicroNet.fr>, 1996.
 # Michel Robitaille <robitail@IRO.UMontreal.CA>, 1996-2006
 # Christophe Combelles <ccomb@free.fr>, 2009, 2010
-# Kevin Raymond <shaiton@fedoraproject.org>, 2012, 2013
+# Kévin Raymond <shaiton@fedoraproject.org>, 2012, 2013, 2015
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU make 4.0\n"
+"Project-Id-Version: GNU make 4.1\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-11-01 16:15+0100\n"
-"Last-Translator: Kevin Raymond <shaiton@fedoraproject.org>\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2015-03-11 22:20+0100\n"
+"Last-Translator: Kévin Raymond <shaiton@fedoraproject.org>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
@@ -52,88 +52,89 @@ msgstr "touch
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch : mauvais code de retour de ar_member_touch pour « %s »"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr "lbr$set_module() n'a pas pu extraire les infos du module. Code = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control() a échoué avec un code = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr ""
-"impossible d'ouvrir la bibliothèque « %s » pour récupérer le membre « %s »"
+"impossible d'ouvrir la bibliothèque « %s » pour récupérer le statut du "
+"membre « %d »"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Membre `%s'%s : %ld octets à %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (le nom peut être tronqué)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Date %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, mode = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "La recette contient trop de lignes (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Break.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr ""
 "*** [%s] le membre « %s » de l'archive peut avoir un problème ; il n'a pas "
 "été supprimé"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr ""
 "*** Le membre « %s » de l'archive peut avoir un problème ; il n'a pas été "
 "supprimé"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Suppression du fichier « %s »"
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Suppression du fichier « %s »"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  recette à exécuter"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (commande interne) :"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (de « %s », ligne %lu) : \n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -141,62 +142,62 @@ msgstr ""
 "\n"
 "# Répertoires\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: « stat » impossible.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (clé %s, mtime %d) : ouverture impossible.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (périphérique %d, inode [%d,%d,%d]) : ouverture impossible.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (périphérique %ld, inode %ld) : ouverture impossible.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (périphérique %s, mtime %d) : "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (périphérique %d, inode [%d,%d,%d]) : "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (périphérique %ld, inode %ld) : "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Aucun"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " fichier(s), "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "aucune"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " impossibilité(s)"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " jusqu'ici."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " impossibilités dans %lu répertoires.\n"
@@ -206,161 +207,161 @@ msgstr " impossibilit
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "La variable récursive « %s » se référence elle-même (à la fin)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "référence incomplète à une variable"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Une recette a été spécifiée pour le fichier « %s » dans %s : %lu,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ""
 "La recette pour le fichier « %s » a été trouvée par une recherche de règle "
 "implicite,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr ""
 "mais « %s » est maintenant considéré comme étant le même fichier que « %s »."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "La recette pour « %s » sera ignorée en faveur de celle pour « %s »."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 "impossible de renommer le deux-points simple « %s » en deux-points double "
 "« %s »"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr ""
 "impossible de renommer le deux-points double « %s » en deux-points simple "
 "« %s »"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Suppression du fichier intermédiaire « %s »"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Suppression des fichiers intermédiaires...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Heure actuelle"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s : horodatage hors limite ; remplacement par %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Pas une cible :"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Fichier précieux (dépendance de .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Cible factice (dépendance de .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Cible de la ligne de commande."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Une valeur par défaut, MAKEFILES ou -include/sinclude makefile."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "# Pas de règle interne"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  La recherche de règle implicite a été effectuée."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  La recherche de règle implicite n'a pas été effectuée."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Préfixe de motif implicite ou statique : « %s »\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Le fichier est une dépendance intermédiaire."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Fabrique également :"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Heure de modification jamais vérifiée."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "# Le fichier n'existe pas."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Le fichier est très ancien."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Dernière modification %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Le fichier a été mis à jour."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Le fichier n'a pas été mis à jour."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Recette en cours d'exécution (CECI EST UNE ANOMALIE)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr ""
 "#  Recette de dépendances en cours d'exécution (CECI EST UNE ANOMALIE)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Mise à jour réussie."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  À besoin d'être mis à jour (l'option -q est activée)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  N'a pas pu être mis à jour."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Valeur non valable dans le membre « command_state » !"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -368,7 +369,7 @@ msgstr ""
 "\n"
 "# Fichiers"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -378,105 +379,122 @@ msgstr ""
 "# stats des tables de hachage des fichiers :\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s : le champ « %s » n'est pas en cache : %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "le premier argument de la fonction « word » doit être numérique"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "le premier argument de la fonction « word » doit être supérieur à 0"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "le premier argument de la fonction « wordlist » doit être numérique"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "le deuxième argument de la fonction « wordlist » doit être numérique"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe : DuplicateHandle(In) a échoué (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe : DuplicateHandle(Err) a échoué (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() a échoué (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe() : process_init_fd() a échoué\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Nettoyage du fichier de commandes temporaire %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "open : %s : %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "write : %s : %s"
 
-#: function.c:2209
-#, c-format
-msgid "Invalid file operation: %s"
+#: function.c:2230 function.c:2267
+#, fuzzy, c-format
+msgid "close: %s: %s"
+msgstr "open : %s : %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr ""
+
+#: function.c:2262
+#, fuzzy, c-format
+msgid "read: %s: %s"
+msgstr "write : %s : %s"
+
+#: function.c:2275
+#, fuzzy, c-format
+msgid "file: invalid file operation: %s"
 msgstr "Fichier d'opérations invalide : %s"
 
-#: function.c:2324
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "nombre d'arguments insuffisant (%d) pour la fonction « %s »"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "non implémenté sur cette plateforme : fonction « %s »"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "appel à la fonction « %s » non terminé : « %c » manquant"
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "Nom de fonction absent\n"
+msgstr "Nom de fonction absent"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "Nom de fonction invalide : %s\n"
+msgstr "Nom de fonction invalide : %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "Nom de fonction trop long : %s\n"
+msgstr "Nom de fonction trop long : %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "nombre d'arguments insuffisant (%d) pour la fonction « %s »\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "nombre d'arguments insuffisant (%d) pour la fonction « %s »"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "nombre d'arguments insuffisant (%d) pour la fonction « %s »\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "nombre d'arguments insuffisant (%d) pour la fonction « %s »"
 
 #: getopt.c:659
 #, c-format
@@ -574,7 +592,7 @@ msgstr "Recherche d'une r
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Recherche d'une règle implicite de membre d'archive pour « %s ».\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Évitement de récursion dans une règle implicite.\n"
 
@@ -618,100 +636,76 @@ msgstr "D
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Recherche d'une règle contenant le fichier intermédaire « %s ».\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Impossible de créer un fichier temporaire\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (core dump créé)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (ignorée)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<commande interne>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s : la recette pour la cible « %s » a échouée"
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
+#: job.c:510
+#, fuzzy, c-format
+msgid "%s[%s: %s] Error %d%s"
 msgstr "%s[%s] Erreur %d%s"
 
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Erreur 0x%x%s"
-
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Attente des tâches non terminées...."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Processus fils actif %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (distant)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Récolte du processus fils perdant %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Récolte du processus fils gagnant %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Nettoyage du fichier de commande temporaire %s\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Le nettoyage du fichier de commandes temporaire %s a échoué (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Retrait du processus fils %p PID %s%s de la chaîne.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "libération de la sémaphore jobserver : erreur (%ld : %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Jeton relâché pour le processus fils %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "écriture vers le serveur de tâches"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() n'a pas pu lancer de processus (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -720,104 +714,100 @@ msgstr ""
 "\n"
 "%d arguments comptés lors du lancement échoué\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Ajout du processus fils %p (%s) PID %s%s à la chaîne.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "attente de la sémaphore ou du processus fils : (erreur %ld : %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Jeton obtenu pour le processus fils %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "lecture du tube des processus"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s : la cible « %s » n'existe pas"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s : mise à jour de la cible « %s » nécessaire pour : %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr ""
 "impossible d'imposer des limites de charge sur ce système d'exploitation"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "impossible d'imposer des limites de charge : "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
 "plus d'identificateur de fichier disponible : impossible de dupliquer stdin\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
 "plus d'identificateur de fichier disponible : impossible de dupliquer "
 "stdout\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
 "plus d'identificateurs de fichier disponible : impossible de dupliquer "
 "stderr\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Impossible de restaurer stdin\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Impossible de restaurer stdout\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "Impossible de restaurer stderr\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr ""
 "make a récolté le processus fils pid %s, toujours en attente du pid %s\n"
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s : commande introuvable"
+
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
 msgstr "%s : commande introuvable"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s : programme Shell introuvable"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe : l'espace d'environnement est peut-être épuisé"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL a été modifié (de « %s » à « %s »)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Création d'un fichier de commande temporaire %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -825,7 +815,7 @@ msgstr ""
 "Contenu du fichier de commande :\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -834,7 +824,7 @@ msgstr ""
 "Contenu du fichier Batch :%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
@@ -865,30 +855,30 @@ msgstr "Echec du chargement du symbole %s 
 msgid "Empty symbol name for load: %s"
 msgstr "Nom du symbole absent pour l'opération « load » : %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Chargement du symbole %s à partir de %s\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr ""
 "Les opérations « load » ne sont pas prises en charge sur cette plateforme."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Options :\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Ignoré pour compatibilité.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 "  -B, --always-make           Fabriquer toutes les cibles sans condition.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -897,19 +887,19 @@ msgstr ""
 "                              Se placer dans le RÉPERTOIRE avant toute "
 "action.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr ""
 "  -d                          Afficher beaucoup d'informations de débogage.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=FLAGS]             Afficher divers types d'informations de "
 "débogage.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -918,14 +908,14 @@ msgstr ""
 "                              Les variables d'environment sont prioritaires "
 "sur les makefiles.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "  --eval=CHAINE               Evaluer la CHAINE comme une instruction de "
 "makefile.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -933,16 +923,16 @@ msgstr ""
 "  -f FICHIER, --file=FICHIER, --makefile=FICHIER\n"
 "                              Lire le FICHIER comme un makefile.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Afficher ce message et quitter.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 "  -i, --ignore-errors         Ignorer les erreurs venant des recettes.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -951,7 +941,7 @@ msgstr ""
 "                              Chercher dans le RÉPERTOIRE les makefiles "
 "traités par inclusion.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -959,14 +949,14 @@ msgstr ""
 "  -j [N], --jobs[=N]          Autoriser N tâches simultanées ; nombre infini "
 "si utilisé sans argument.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Poursuivre même si certaines cibles n'ont pas "
 "pu être fabriquées.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -976,7 +966,7 @@ msgstr ""
 "                              Ne pas lancer de tâches multiples à moins que "
 "la charge soit inférieure à N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -984,7 +974,7 @@ msgstr ""
 "  -L, --check-symlink-times   Utiliser le « mtime » le plus récent entre les "
 "liens symboliques et la cible.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -994,7 +984,7 @@ msgstr ""
 "                              N'exécuter aucune recette ; seulement les "
 "afficher.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -1004,7 +994,7 @@ msgstr ""
 "                              Considérer le FICHIER comme étant très ancien "
 "et ne pas le refabriquer.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -1013,12 +1003,12 @@ msgstr ""
 "                              Synchronise la sortie des tâches parallèles "
 "par TYPE.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr ""
 "  -p, --print-data-base       Afficher la base de données interne de make.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1026,22 +1016,22 @@ msgstr ""
 "  -q, --question              Ne pas exécuter de recette ; le code de sortie "
 "indique si la cible est à jour.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Désactiver les règles implicites internes.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables  Désactiver les réglages des variables "
 "internes.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Ne pas répéter les recettes.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1049,28 +1039,28 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Désactiver -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Assigner l'heure actuelle aux cibles au lieu "
 "de les refabriquer.\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                     Afficher les traces mémoire.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 "  -v, --version               Afficher le numéro de version de make et "
 "quitter.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Afficher le répertoire courant.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1078,7 +1068,7 @@ msgstr ""
 "  --no-print-directory        Désactiver l'option -w, même si elle a été "
 "activée implicitement.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1087,7 +1077,7 @@ msgstr ""
 "                              Considérer le FICHIER comme étant toujours "
 "nouveau.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1095,27 +1085,27 @@ msgstr ""
 "  --warn-undefined-variables  Prévenir lorsqu'une variable non définie est "
 "référencée.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "une chaîne vide n'est pas un nom de fichier valable"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "niveau de débogage inconnu « %s »"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "type de output-sync « %s » inconnu"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr ""
 "%s: interception de l'interruption/exception (code = 0x%lx, addr = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1130,187 +1120,142 @@ msgstr ""
 "ExceptionFlags = %lx\n"
 "ExceptionAddress = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Violation d'accès : opération d'écriture à l'adresse 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Violation d'accès : opération de lecture à l'adresse 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() définit default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr ""
 "La recherche de chemin de find_and_set_shell() a définit default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s s'arrête pendant 30 secondes..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "sleep(30) terminé. On continue.\n"
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
-"erreur interne : impossible d'ouvrir la sémaphore « %s » du jobserver : "
-"(erreur %ld : %s) "
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "client Jobserver (semaphore %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "erreur interne : chaîne --jobserver-fds incorrecte « %s »"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "client Jobserver (fds %d,%d)\n"
+"avertissement : jobserver n'est pas disponible : utilisation de -j1. Ajouter "
+"« + » à la règle parent du make."
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
 "AVERTISSEMENT : -jN forcé dans un submake : désactivation du mode serveur de "
 "tâches."
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "duplication du serveur de tâches"
-
-#: main.c:1570
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-"avertissement : jobserver n'est pas disponible : utilisation de -j1. Ajouter "
-"« + » à la règle parent du make."
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefile depuis l'entrée standard spécifié deux fois."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (fichier temporaire)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (fichier temporaire)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr ""
 "Les tâches en parallèle (-j) ne sont pas prises en charge sur cette "
 "plateforme."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "On revient en mode monotâche (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Nombre de clients jobserver limités à %d\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "création de la sémaphore du jobserver : (erreur %ld : %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "création d'un tube pour les tâches"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "initialisation du tube du serveur de tâches"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr ""
 "Les liens symboliques ne sont pas pris en charge : désactivation de -L."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Mise à jour des makefiles....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "Le makefile « %s » pourrait boucler ; on ne recommence pas.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Échec de refabrication du makefile « %s »."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Le makefile inclus « %s » est introuvable."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Le makefile « %s » est introuvable"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Impossible de revenir dans le répertoire d'origine."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Réexécution[%u] :"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (fichier temporaire) :"
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL contient plus d'une cible"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Pas de cible spécifiée et aucun makefile n'a été trouvé"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Pas de cible"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Mise à jour des objectifs cibles....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "AVERTISSEMENT : décalage d'horloge détecté. La construction peut être "
 "incomplète."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Utilisation : %s [options] [cible] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1319,7 +1264,7 @@ msgstr ""
 "\n"
 "Ce programme est construit pour %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1328,32 +1273,32 @@ msgstr ""
 "\n"
 "Ce programme est construit pour %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Signaler les anomalies à <bug-make@gnu.org>.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "l'option « %s%s » a besoin d'une chaîne non vide comme argument"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "l'option « -%c » prend en argument un entier positif"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sConstruit pour %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sConstruit pour %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1367,7 +1312,7 @@ msgstr ""
 "redistribuer.\n"
 "%sIl ne comporte AUCUNE GARANTIE, dans la mesure de ce que permet la loi.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1376,7 +1321,7 @@ msgstr ""
 "\n"
 "# Base de données de Make, imprimée le %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1385,29 +1330,29 @@ msgstr ""
 "\n"
 "# Base de données de Make terminée le %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Erreur inconnue %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s : utilisateur %lu (reél %lu), groupe %lu (réel %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Accès initialisé"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Accès utilisateur"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Accès de Make"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Accès des fils"
 
@@ -1452,9 +1397,8 @@ msgid "%s[%u]: Leaving directory '%s'\n"
 msgstr "%s[%u] : on quitte le répertoire « %s »\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "erreur d'écriture : %s"
+msgstr "erreur d'écriture : stdout"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1470,227 +1414,265 @@ msgstr "%s%s : %s"
 msgid "%s: %s"
 msgstr "%s : %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "création d'un tube pour les tâches"
+
+#: posixos.c:72 posixos.c:227
+#, fuzzy
+msgid "duping jobs pipe"
+msgstr "création d'un tube pour les tâches"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "initialisation du tube du serveur de tâches"
+
+#: posixos.c:90
+#, fuzzy, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "erreur interne : chaîne --jobserver-fds incorrecte « %s »"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "client Jobserver (fds %d,%d)\n"
+
+#: posixos.c:109
+#, fuzzy
+msgid "jobserver pipeline"
+msgstr "initialisation du tube du serveur de tâches"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "écriture vers le serveur de tâches"
+
+#: posixos.c:268
+#, fuzzy
+msgid "pselect jobs pipe"
+msgstr "lecture du tube des processus"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "lecture du tube des processus"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Lecture des makefiles...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "Lecture du makefile « %s »"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (pas d'objectif par défaut)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (chemin de recherche)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (peu importe)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (pas de remplacement du ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "On saute les BOM UTF-8 du makefile « %s »\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "On saute les BOM UTF-8 du tampon makefile\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "syntaxe incorrecte dans la condition"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s : echec du chargement"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "La recette commence avant la première cible"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "règle manquante avant la recette"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (vouliez-vous dire TAB au lieu des 8 espaces ?)"
+msgstr "séparateur manquant (vouliez-vous dire TAB au lieu des 8 espaces ?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "séparateur manquant %s"
+msgstr "séparateur manquant"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "motif de cible manquant"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "motifs de cible multiples"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "le motif de cible ne contient pas « %% »"
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "« endif » manquant"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "nom de variable vide"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "texte superflu après la directive « define »"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "« endef » manquant, « define » non terminé"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "texte superflu après la directive « endef »"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "texte superflu après la directive « %s »"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "« %s » superflu"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "un seul « else » par condition"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Définition malformée de variable spécifique à une cible"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "les prérequis ne peuvent être définis dans des recettes"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "mélange de règles implicites et statiques pour le motif"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "mélange de règles implicites et normales"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "la cible « %s » ne correspond pas au motif de cible"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "le fichier cible « %s » possède à la fois des entrées : et ::"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "la cible « %s » apparaît plus d'une fois dans la même règle."
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "avertissement : surchargement de la recette pour la cible « %s »"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "avertissement : ancienne recette ignorée pour la cible « %s »"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "mélange de règles implicites et normales"
+msgstr "*** mélange de règles implicites et normales : syntaxe obsolète"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr ""
 "AVERTISSEMENT : caractère NUL détecté ; le reste de la ligne est ignoré"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "rien à faire pour « %s »."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "« %s » est à jour."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Élagage du fichier « %s ».\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr ""
 "%s Aucune règle pour fabriquer la cible « %s », nécessaire pour « %s »%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sAucune règle pour fabriquer la cible « %s »%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Étude du fichier cible « %s ».\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Tentative récente échouée de mettre à jour le fichier « %s ».\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Le fichier « %s » a déjà été étudié.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Mise à jour du fichier « %s » en cours.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Fin de la mise à jour du fichier « %s ».\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Le fichier « %s » n'existe pas.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1698,140 +1680,140 @@ msgstr ""
 "*** Avertissement : le fichier .LOW_RESOLUTION_TIME « %s » a un horodatage à "
 "haute résolution"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Règle implicite trouvée pour « %s ».\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Pas de règle implicite trouvée pour « %s ».\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Utilisation de la recette par défaut pour « %s ».\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Dépendance circulaire %s <- %s abandonnée."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Fin des dépendances du fichier cible « %s ».\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Les dépendances de « %s » sont en cours de fabrication.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Abandon du fichier cible « %s ».\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "La cible « %s » n'a pas été refabriquée à cause d'erreurs."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "La dépendance « %s » ne commande que la cible « %s ».\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "La dépendance « %s » de la cible « %s » n'existe pas.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "La dépendance « %s » est plus récente que la cible « %s ».\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "uLa dépendance « %s » est plus ancienne que la cible « %s ».\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "La cible « %s » a un deux-points double et n'a pas de dépendance.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "Pas de recette pour « %s » et aucune dépendance n'a changé.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Fabrication de « %s » à cause de l'indicateur « always-make ».\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "Inutile de refabriquer la cible « %s »"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr " ; utilisation du nom VPATH « %s »"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Il faut refabriquer la cible « %s ».\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  On ignore le nom VPATH « %s ».\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "La recette de « %s » est en cours d'exécution.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Échec de refabrication du fichier cible « %s ».\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Refabrication réussie du fichier cible « %s ».\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Le fichier cible « %s » a besoin d'être refabriqué avec l'option -q.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Utilisation des commandes par défaut pour « %s ».\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr ""
 "Avertissement : le fichier « %s » a une date de modification dans le futur"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr ""
 "Avertissement : le fichier « %s » a une date de modification %s s dans le "
 "futur"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "l'élément « %s » de .LIBPATTERNS n'est pas un motif"
@@ -1841,7 +1823,7 @@ msgstr "l'
 msgid "Customs won't export: %s\n"
 msgstr "« customs » n'exportera pas : %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1849,7 +1831,7 @@ msgstr ""
 "\n"
 "# Règles implicites"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1857,7 +1839,7 @@ msgstr ""
 "\n"
 "# Pas de règle implicite."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1866,11 +1848,11 @@ msgstr ""
 "\n"
 "# %u règles implicites, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminal."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "ANOMALIE : num_pattern_rules est faux !  %u != %u"
@@ -2031,7 +2013,7 @@ msgstr "Demande d'informations"
 msgid "Floating point co-processor not available"
 msgstr "Coprocesseur en virgule flottante non disponible"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -2040,7 +2022,7 @@ msgstr ""
 "\n"
 "%s pas de tampons strcache\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2051,7 +2033,7 @@ msgstr ""
 "%s strcache utilisé : %lu (%lu) / chaînes = %lu / espace = %lu o / moy = %lu "
 "o\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
@@ -2059,19 +2041,19 @@ msgstr ""
 "%s tampon courant : taille = %hu o / utilisé = %hu o / nombre = %hu / moy = "
 "%hu o\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s autre utilisé : total = %lu o / nombre = %lu / moy = %lu o\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 "%s autre libre : total = %lu o / max = %lu o / min = %lu o / moy = %hu o\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2080,7 +2062,7 @@ msgstr ""
 "\n"
 "%s performance strcache : lookups = %lu / accès = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2088,44 +2070,44 @@ msgstr ""
 "# stats des tables de hachage :\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automatique"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "défaut"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "environnement"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "environnement avec l'option -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "ligne de commande"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "directive « override »"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (depuis « %s », ligne %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# stats des tables de hachage de la variable « set » :\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2133,7 +2115,7 @@ msgstr ""
 "\n"
 "# Variables\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2141,7 +2123,7 @@ msgstr ""
 "\n"
 "# Valeurs de variable spécifiques au motif"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2149,7 +2131,7 @@ msgstr ""
 "\n"
 "# pas de valeurs de variable spécifiques au motif"
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2168,89 +2150,39 @@ msgstr "avertissement
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() a échoué avec %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "AVERTISSEMENT : redirection vide\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "erreur interne : « %s » command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 "-warning, vous pourriez avoir besoin de réactiver le traitement de CTRL-Y "
 "par DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "COMMANDE INTERNE [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "COMMANDE CD INTERNE %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "COMMANDE CD INTERNE %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Commande interne inconnue « %s »\n"
-
-#: vmsjobs.c:592
+#: vmsjobs.c:1228
 #, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Erreur, commande vide\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Entrée redirigée depuis %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Erreur redirigée vers %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Sortie ajoutée à %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Sortie redirigée vers %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Ajoute %.*s et nettoie\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Exécution de %s à la place\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Erreur de lancement, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2258,11 +2190,11 @@ msgstr ""
 "\n"
 "# Chemins de recherche VPATH\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# Aucun chemin de recherche « vpath »."
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2271,7 +2203,7 @@ msgstr ""
 "\n"
 "# %u chemins de recherche « vpath ».\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2279,7 +2211,7 @@ msgstr ""
 "\n"
 "# Aucun chemin de recherche général (variable « VPATH »)."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2289,6 +2221,85 @@ msgstr ""
 "# Chemin de recherche général (variable « VPATH ») :\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Nombre de clients jobserver limités à %d\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "création de la sémaphore du jobserver : (erreur %ld : %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"erreur interne : impossible d'ouvrir la sémaphore « %s » du jobserver : "
+"(erreur %ld : %s) "
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "client Jobserver (semaphore %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "libération de la sémaphore jobserver : erreur (%ld : %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "attente de la sémaphore ou du processus fils : (erreur %ld : %s)"
+
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s : la recette pour la cible « %s » a échoué"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] Erreur 0x%x%s"
+
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
+#~ msgid "dup jobserver"
+#~ msgstr "duplication du serveur de tâches"
+
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "AVERTISSEMENT : redirection vide\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "erreur interne : « %s » command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "COMMANDE INTERNE [%s][%s]\n"
+
+#~ msgid "BUILTIN ECHO %s->%s\n"
+#~ msgstr "COMMANDE ECHO INTERNE  %s->%s\n"
+
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Commande interne inconnue « %s »\n"
+
+#~ msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+#~ msgstr ""
+#~ "Commande interne inconnue ou non prise en charge par .ONESHELL : « %s »\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Erreur, commande vide\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Entrée redirigée depuis %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Erreur redirigée vers %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Sortie redirigée vers %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Erreur de lancement, %d\n"
+
 #~ msgid "internal error: multiple --sync-mutex options"
 #~ msgstr "erreur interne : options --sync-mutex multiples"
 
index 39e658e..39688b8 100644 (file)
Binary files a/po/ga.gmo and b/po/ga.gmo differ
index 7e865a5..ede06e4 100644 (file)
--- a/po/ga.po
+++ b/po/ga.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: make 3.81\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
 "PO-Revision-Date: 2006-04-22 16:02-0500\n"
 "Last-Translator: Kevin Patrick Scannell <scannell@SLU.EDU>\n"
 "Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
@@ -45,88 +45,88 @@ msgstr "touch: N
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: Droch-chód aisfhillidh ó ar_member_touch ar `%s'"
 
-#: arscan.c:124
+#: arscan.c:130
 #, fuzzy, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 "níorbh fhéidir le lbr$set_module an t-eolas modúil a bhaint amach, stádas = "
 "%d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, fuzzy, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "theip ar lbr$ini_control le stádas = %d"
 
-#: arscan.c:255
+#: arscan.c:261
 #, fuzzy, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr ""
 "ní féidir leabharlann `%s' a oscailt chun cuardach a dhéanamh ar an mball `"
 "%s'"
 
-#: arscan.c:944
+#: arscan.c:965
 #, fuzzy, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Ball `%s'%s: %ld beart ag %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (is féidir go bhfuil an t-ainm teasctha)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Dáta %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, mód = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr ""
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Briseadh.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, fuzzy, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Is féidir gur ball bréige é `%s'; ní scriosadh"
 
-#: commands.c:633
+#: commands.c:631
 #, fuzzy, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Is féidir gur ball bréige é `%s'; ní scriosadh"
 
-#: commands.c:647
+#: commands.c:645
 #, fuzzy, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Comhad `%s' á scriosadh"
 
-#: commands.c:649
+#: commands.c:647
 #, fuzzy, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Comhad `%s' á scriosadh"
 
-#: commands.c:685
+#: commands.c:683
 #, fuzzy
 msgid "#  recipe to execute"
 msgstr "#  orduithe le rith"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (insuite):"
 
-#: commands.c:690
+#: commands.c:688
 #, fuzzy, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (ó `%s', líne %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -134,62 +134,62 @@ msgstr ""
 "\n"
 "# Comhadlanna\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: níorbh fhéidir é a stat.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (eochair %s, am-m %d): ní féidir é a oscailt.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (gléas %d, i-nód [%d,%d,%d]): ní féidir é a oscailt.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (gléas %ld, i-nód %ld): níorbh fhéidir é a oscailt.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (eochair %s, am-m %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (gléas %d, i-nód [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (gléas %ld, i-nód %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Ná Déan"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " comhad, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "níl"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " rudaí neamhfhéideartha"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " go dtí seo."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " rudaí neamhfhéideartha i %lu comhadlann.\n"
@@ -199,164 +199,164 @@ msgstr " ruda
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Déanann an athróg athchúrsach `%s' tagairt dó féin (sa deireadh)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "tagairt athróige gan chríochnú"
 
-#: file.c:271
+#: file.c:278
 #, fuzzy, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Sonraíodh orduithe le haghaidh comhaid `%s' ag %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, fuzzy, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ""
 "Aimsíodh orduithe le haghaidh `%s' trí chuardach ar rialacha intuigthe,"
 
-#: file.c:280
+#: file.c:287
 #, fuzzy, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "ach anois is ionann iad na comhaid `%s' agus `%s'."
 
-#: file.c:283
+#: file.c:290
 #, fuzzy, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ""
 "Déanfar neamhshuim ar orduithe le haghaidh `%s'; úsáidfear na cinn le "
 "haghaidh `%s' ina n-ionad."
 
-#: file.c:303
+#: file.c:310
 #, fuzzy, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 "ní féidir idirstad aonair `%s' a athainmnigh le hidirstad dúbailte `%s'"
 
-#: file.c:309
+#: file.c:316
 #, fuzzy, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "ní féidir idirstad dúbailte `%s' a athainmniú le hidirstad aonair `%s'"
 
-#: file.c:401
+#: file.c:408
 #, fuzzy, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Comhad idirmheánach `%s' á scriosadh"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Comhaid idirmheánacha á mbaint...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "An t-am anois"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Stampa ama as raon; %s á úsáid ina ionad"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Ní sprioc é:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Comhad luachmhar (réamhriachtanas de .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Sprioc bhréige (réamhriachtanas de .PHONY)."
 
-#: file.c:964
+#: file.c:971
 #, fuzzy
 msgid "#  Command line target."
 msgstr "#  Sprioc líne na n-orduithe."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Makefile réamhshocraithe, nó ó MAKEFILES, nó -include/sinclude."
 
-#: file.c:968
+#: file.c:975
 #, fuzzy
 msgid "#  Builtin rule"
 msgstr ""
 "\n"
 "# Níl aon riail intuigthe."
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Rinneadh cuardach ar rialacha intuigthe."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Ní dhearna cuardach ar rialacha intuigthe."
 
-#: file.c:973
+#: file.c:980
 #, fuzzy, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Stoc patrúin intuigthe/statach: `%s'\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Tá an comhad ina réamhriachtanas idirmheánach."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Déantar fosta:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Níor seiceáladh an t-am mionathraithe riamh."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Níl a leithéid de chomhad ann."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Is cianaosta an comhad seo."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Athraithe %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Nuashonraíodh an comhad."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Níor nuashonraíodh an comhad."
 
-#: file.c:1001
+#: file.c:1008
 #, fuzzy
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Tá orduithe ann atá ag rith faoi láthair (IS FABHT É SEO)."
 
-#: file.c:1004
+#: file.c:1011
 #, fuzzy
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Tá orduithe spleáchais ag rith (IS FABHT É SEO)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  D'éirigh leis an nuashonrú."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Tá gá le nuashonrú (-q ceaptha)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Theip ar nuashonrú."
 
-#: file.c:1025
+#: file.c:1032
 #, fuzzy
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Luach neamhbhailí sa bhall `command_state'!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -364,7 +364,7 @@ msgstr ""
 "\n"
 "# Comhaid"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -374,108 +374,126 @@ msgstr ""
 "# comhaid hais-tábla stait:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr ""
 
-#: function.c:780
+#: function.c:790
 #, fuzzy
 msgid "non-numeric first argument to 'word' function"
 msgstr "tá an chéad argóint neamhuimhriúil leis an fheidhm `word'"
 
-#: function.c:785
+#: function.c:795
 #, fuzzy
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "caithfidh an chéad argóint leis an fheidhm `word' a bheith deimhneach"
 
-#: function.c:805
+#: function.c:815
 #, fuzzy
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "is neamhuimhriúil í an chéad argóint leis an fheidhm `wordlist'"
 
-#: function.c:807
+#: function.c:817
 #, fuzzy
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "is neamhuimhriúil í an dara hargóint leis an fheidhm `wordlist'"
 
-#: function.c:1499
+#: function.c:1525
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "create_child_process: theip ar DuplicateHandle(In) (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "create_child_process: theip ar DuplicateHandle(Earr) (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "Theip ar CreatePipe() (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 #, fuzzy
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe (): theip ar process_init_fd()\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Baisc-chomhad sealadach %s á ghlanadh\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, fuzzy, c-format
 msgid "open: %s: %s"
 msgstr "%s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, fuzzy, c-format
 msgid "write: %s: %s"
 msgstr "earráid sa scríobh: %s"
 
-#: function.c:2209
-#, c-format
-msgid "Invalid file operation: %s"
+#: function.c:2230 function.c:2267
+#, fuzzy, c-format
+msgid "close: %s: %s"
+msgstr "%s%s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
 msgstr ""
 
-#: function.c:2324
+#: function.c:2262
+#, fuzzy, c-format
+msgid "read: %s: %s"
+msgstr "%s: %s"
+
+#: function.c:2275
+#, fuzzy, c-format
+msgid "file: invalid file operation: %s"
+msgstr "%s: rogha neamhbhailí -- %c\n"
+
+#: function.c:2390
 #, fuzzy, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "easpa argóintí (%d) d'fheidhm `%s'"
 
-#: function.c:2336
+#: function.c:2402
 #, fuzzy, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "níl an fheidhm `%s' ar fáil ar an chóras seo"
 
-#: function.c:2399
+#: function.c:2466
 #, fuzzy, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "glao ar fheidhm `%s' gan chríochnú: `%c' ar iarraidh"
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
 msgstr ""
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
 msgstr ""
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
 msgstr ""
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
+msgid "Invalid minimum argument count (%u) for function %s"
 msgstr "easpa argóintí (%d) d'fheidhm `%s'"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
+msgid "Invalid maximum argument count (%u) for function %s"
 msgstr "easpa argóintí (%d) d'fheidhm `%s'"
 
 #: getopt.c:659
@@ -574,7 +592,7 @@ msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr ""
 "Ag déanamh cuardach ar riail intuigthe le haghaidh bhall cartlainne `%s'.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Athchúrsáil de bharr rialacha intuigthe á seachaint.\n"
 
@@ -618,102 +636,78 @@ msgstr "Aims
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Ag déanamh cuardach ar riail le comhad idirmheánach `%s'.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Ní féidir comhad sealadach a chruthú\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (córdhumpa)"
 
-#: job.c:488
+#: job.c:490
 #, fuzzy
 msgid " (ignored)"
 msgstr "[%s] Earráid %d (rinneadh neamhshuim)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 #, fuzzy
 msgid "<builtin>"
 msgstr " (insuite):"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr ""
-
-#: job.c:516 job.c:524
+#: job.c:510
 #, fuzzy, c-format
-msgid "%s[%s] Error %d%s"
+msgid "%s[%s: %s] Error %d%s"
 msgstr "*** [%s] Earráid %d"
 
-#: job.c:519
-#, fuzzy, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "*** [%s] Earráid 0x%x"
-
-#: job.c:529
-#, fuzzy, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s%s: %s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Ag fanacht le jabanna neamhchríochnaithe..."
 
-#: job.c:651
+#: job.c:629
 #, fuzzy, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Mac beo 0x%08lx (%s) PID %ld %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (cianda)"
 
-#: job.c:841
+#: job.c:831
 #, fuzzy, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Mac caillteach á bhaint: 0x%08lx PID %ld %s\n"
 
-#: job.c:842
+#: job.c:832
 #, fuzzy, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Mac buaiteach á bhaint: 0x%08lx PID %ld %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Baisc-chomhad sealadach %s á ghlanadh\n"
 
-#: job.c:855
+#: job.c:845
 #, fuzzy, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Baisc-chomhad sealadach %s á ghlanadh\n"
 
-#: job.c:961
+#: job.c:951
 #, fuzzy, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Mac 0x%08lx PID %ld%s á dhealú ón slabhra.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, fuzzy, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Saoradh ceadchomhartha le haghaidh mac 0x%08lx (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "scríobh jabfhreastalaí"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "theip ar process_easy(); níor tosaíodh próiseas (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -722,114 +716,110 @@ msgstr ""
 "\n"
 "%d argóint sa tosú theipthe\n"
 
-#: job.c:1735
+#: job.c:1581
 #, fuzzy, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Ag cur mac 0x%08lx (%s) PID %ld%s ar an slabhra.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:2019
+#: job.c:1811
 #, fuzzy, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Fuarthas ceadchomhartha le haghaidh mac 0x%08lx (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "léadh píopa na jabanna"
-
-#: job.c:2056
+#: job.c:1838
 #, fuzzy, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "touch: Níl an chartlann `%s' ann"
 
-#: job.c:2059
+#: job.c:1841
 #, fuzzy, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr ""
 "%sNíl aon riail chun an sprioc `%s' a dhéanamh, riachtanach le haghaidh `"
 "%s'%s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "ní féidir srianta lóid a chur i bhfeidhm ar an chóras oibriúcháin seo"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "ní féidir srian lóid a chur i bhfeidhm: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "níl aon hanla comhaid le fáil: níorbh fhéidir stdin a chóipeáil\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "níl aon hanla comhaid le fáil: níorbh fhéidir stdout a chóipeáil\n"
 
-#: job.c:2278
+#: job.c:2074
 #, fuzzy
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "níl aon hanla comhaid le fáil: níorbh fhéidir stdin a chóipeáil\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Níorbh fhéidir stdin a athchóiriú\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Níorbh fhéidir stdout a athchóiriú\n"
 
-#: job.c:2309
+#: job.c:2105
 #, fuzzy
 msgid "Could not restore stderr\n"
 msgstr "Níorbh fhéidir stdin a athchóiriú\n"
 
-#: job.c:2420
+#: job.c:2234
 #, fuzzy, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "ghin make mac le pid %ld, ag feitheamh le pid %ld fós\n"
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
 msgstr "%s: Ní bhfuarthas an t-ordú"
 
-#: job.c:2518
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s: Ní bhfuarthas an t-ordú"
+
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Ní bhfuarthas an clár blaoisce"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: is féidir gur ídithe í cuimhne na timpeallachta"
 
-#: job.c:2765
+#: job.c:2584
 #, fuzzy, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "Athraíodh $SHELL (ba `%s' é, agus is `%s' é anois)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Baisc-chomhad sealadach %s á chruthú\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
 msgstr ""
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
 "\t%s\n"
 msgstr ""
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
@@ -859,29 +849,29 @@ msgstr ""
 msgid "Empty symbol name for load: %s"
 msgstr ""
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr ""
 
-#: load.c:244
+#: load.c:256
 #, fuzzy
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Níl jabanna parailéalacha (-j) ar fáil ar an gcóras seo."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Roghanna:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Déan neamhshuim (comhoiriúnacht)\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make           Déan gach sprioc, gan choinníollacha.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -889,18 +879,18 @@ msgstr ""
 "  -C COMHADLANN, --directory=COMHADLANN\n"
 "                              Téigh go COMHADLANN roimh dhéanamh aon rud.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          Taispeáin go leor eolas dífhabhtaithe.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=BRATACHA]          Taispeáin eolas fabhtaithe de chineálacha "
 "éagsúla.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -908,12 +898,12 @@ msgstr ""
 "  -e, --environment-overrides\n"
 "                              Sáraíonn athróga timpeallachta makefileanna.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -921,17 +911,17 @@ msgstr ""
 "  -f COMHAD, --file=COMHAD, --makefile=COMHAD\n"
 "                              Léigh COMHAD mar makefile.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Taispeáin an chabhair seo agus scoir.\n"
 
-#: main.c:335
+#: main.c:360
 #, fuzzy
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 "  -i, --ignore-errors         Déan neamhshuim ar earráidí ó orduithe.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -940,7 +930,7 @@ msgstr ""
 "                              Cuardaigh i gCOMHADLANN ar makefileanna "
 "breise.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -948,14 +938,14 @@ msgstr ""
 "  -j [N], --jobs[=N]          Ceadaigh N jab le chéile; éigríoch mura "
 "gceaptar arg.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Lean ar aghaidh fiú nach féidir sprioc a "
 "dhéanamh.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -965,7 +955,7 @@ msgstr ""
 "                              Ná tosaigh jabanna iomadúla mura bhfuil an lód "
 "níos lú ná N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -974,7 +964,7 @@ msgstr ""
 "nasc\n"
 "                                 siombalach nó ar an sprioc.\n"
 
-#: main.c:349
+#: main.c:374
 #, fuzzy
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
@@ -985,7 +975,7 @@ msgstr ""
 "                              Ná rith aon ordú; taispeáin torthaí mar dhea "
 "amháin.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -995,18 +985,18 @@ msgstr ""
 "                              Caith le COMHAD mar cheann cianaosta; ná "
 "hathdhéan é.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr ""
 "  -p, --print-data-base       Taispeáin an bunachar sonraí inmheánach.\n"
 
-#: main.c:360
+#: main.c:385
 #, fuzzy
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
@@ -1015,21 +1005,21 @@ msgstr ""
 "  -q, --question              Ná rith aon ordú; stádas scortha = 0 mura gá "
 "le nuashonrú.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Díchumasaigh na rialacha intuigthe insuite.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr "  -R, --no-builtin-variables  Díchumasaigh na hathróga insuite.\n"
 
-#: main.c:366
+#: main.c:391
 #, fuzzy
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Ná déan macalla ar orduithe.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1037,28 +1027,28 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Múch -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Teagmhaigh spriocanna in ionad iad a "
 "athdhéanamh.\n"
 
-#: main.c:373
+#: main.c:398
 #, fuzzy
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  -d                          Taispeáin go leor eolas dífhabhtaithe.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 "  -v, --version               Taispeáin eolas faoin leagan agus scoir.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Taispeáin an chomhadlann reatha.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1066,7 +1056,7 @@ msgstr ""
 "  --no-print-directory        Múch -w, fiú má tá sé i bhfeidhm go "
 "hintuigthe.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1075,7 +1065,7 @@ msgstr ""
 "                              Caith le COMHAD mar cheann úrnua (go "
 "héigríoch).\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1083,26 +1073,26 @@ msgstr ""
 "  --warn-undefined-variables  Tabhair rabhadh má dhéantar tagairt d'athróg "
 "gan sainmhíniú.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "ní féidir teaghrán folamh a úsáid mar ainm comhaid"
 
-#: main.c:737
+#: main.c:766
 #, fuzzy, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "sonrú anaithnid `%s' ar an leibhéal dífhabhtaithe"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr ""
 
-#: main.c:828
+#: main.c:861
 #, fuzzy, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: Fuarthas idirbhriseadh/eisceacht (cód = 0x%lx, seoladh = 0x%lx)\n"
 
-#: main.c:835
+#: main.c:868
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -1117,66 +1107,37 @@ msgstr ""
 "BratachaEisceachta = %lx\n"
 "SeoladhEisceachta = %lx\n"
 
-#: main.c:843
+#: main.c:876
 #, fuzzy, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Sárú rochtana: oibríocht scríofa ag seoladh %lx\n"
 
-#: main.c:844
+#: main.c:877
 #, fuzzy, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Sárú rochtana: oibríocht léimh ag seoladh %lx\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, fuzzy, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "tá find_and_set_shell ag socrú default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, fuzzy, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "shocraigh find_and_set_shell conair chuardaigh default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "cuirfear %s ar fionraí ar feadh tréimhse 30 soicind..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "sleep(30) críochnaithe. Ag gabháil ar aghaidh.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr ""
-
-#: main.c:1534
-#, fuzzy, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "earráid inmheánach: teaghrán neamhbhailí --jobserver-fds `%s'"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr ""
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr "rabhadh: -jN fórsáilte i bhfo-make: mód jabfhreastalaí á dhíchumasú."
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "jabfhreastalaí dup"
-
-#: main.c:1570
+#: main.c:1627
 #, fuzzy
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
@@ -1184,111 +1145,97 @@ msgstr ""
 "rabhadh: níl jabfhreastalaí ar fáil: ag baint úsáid as -j1.  Cuir `+' leis "
 "an máthair-riail."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr "rabhadh: -jN fórsáilte i bhfo-make: mód jabfhreastalaí á dhíchumasú."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Sonraíodh Makefile ón ionchur caighdeánach faoi dhó."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (comhad sealadach)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (comhad sealadach)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Níl jabanna parailéalacha (-j) ar fáil ar an gcóras seo."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Á athshocrú le haghaidh jabanna aonair (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr ""
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "píopa na jabanna á chruthú"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "píopa an jabfhreastalaí á thúsú"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "ní thacaítear le naisc shiombalacha: -L á dhíchumasú."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Makefileanna á nuashonrú....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, fuzzy, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "is féidir go lúbfar an Makefile `%s'; ní athdhéanfar é.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, fuzzy, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Theip ar athdhéanamh an makefile `%s'."
 
-#: main.c:2257
+#: main.c:2303
 #, fuzzy, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Níor aimsíodh an makefile `%s' san áireamh."
 
-#: main.c:2262
+#: main.c:2308
 #, fuzzy, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Níor aimsíodh an makefile `%s'"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Níorbh fhéidir an chomhadlann oibre a athrú ar ais."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Á rith arís[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (comhad sealadach): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr "tá níos mó ná aon sprioc amháin i .DEFAULT_GOAL"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Níor sonraíodh aon sprioc agus níor aimsíodh aon makefile"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Níl aon sprioc ann"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Cinn sprice á nuashonrú....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr "rabhadh:  Clog ar sceabha.  Is féidir go bhfuil an tógáil neamhiomlán."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Úsáid: %s [roghanna] [sprioc] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1297,7 +1244,7 @@ msgstr ""
 "\n"
 "Tógadh an clár seo le haghaidh %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1306,36 +1253,36 @@ msgstr ""
 "\n"
 "Tógadh an clár seo le haghaidh %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Seol tuairiscí fabhtanna chuig <bug-make@gnu.org>\n"
 
-#: main.c:2807
+#: main.c:2869
 #, fuzzy, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "caithfidh tú teaghrán nach folamh a thabhairt mar argóint le `-%c'"
 
-#: main.c:2871
+#: main.c:2933
 #, fuzzy, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "caithfidh tú slánuimhir dheimhneach a thabhairt mar argóint le `-%c'"
 
-#: main.c:3269
+#: main.c:3331
 #, fuzzy, c-format
 msgid "%sBuilt for %s\n"
 msgstr ""
 "\n"
 "%sTógadh an clár seo le haghaidh %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, fuzzy, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr ""
 "\n"
 "%sTógadh an clár seo le haghaidh %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1344,7 +1291,7 @@ msgid ""
 "%sThere is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1353,7 +1300,7 @@ msgstr ""
 "\n"
 "# Bunachar sonraí Make, priontáilte ar %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1362,29 +1309,29 @@ msgstr ""
 "\n"
 "# Críochnaíodh an bunachar sonraí Make seo ar %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Earráid anaithnid %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: úsáideoir %lu (fíor %lu), grúpa %lu (fíor %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Rochtain túsaithe"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Rochtain úsáideora"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Rochtain make"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Rochtain mic"
 
@@ -1447,379 +1394,420 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "píopa na jabanna á chruthú"
+
+#: posixos.c:72 posixos.c:227
+#, fuzzy
+msgid "duping jobs pipe"
+msgstr "píopa na jabanna á chruthú"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "píopa an jabfhreastalaí á thúsú"
+
+#: posixos.c:90
+#, fuzzy, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "earráid inmheánach: teaghrán neamhbhailí --jobserver-fds `%s'"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr ""
+
+#: posixos.c:109
+#, fuzzy
+msgid "jobserver pipeline"
+msgstr "píopa an jabfhreastalaí á thúsú"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "scríobh jabfhreastalaí"
+
+#: posixos.c:268
+#, fuzzy
+msgid "pselect jobs pipe"
+msgstr "léadh píopa na jabanna"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "léadh píopa na jabanna"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Makefileanna á léamh...\n"
 
-#: read.c:335
+#: read.c:329
 #, fuzzy, c-format
 msgid "Reading makefile '%s'"
 msgstr "Makefile `%s' á léamh"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (gan ceann sprice réamhshocraithe)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (conair chuardaigh)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (is cuma)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (ná fairsing ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr ""
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr ""
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "comhréir neamhbhailí i gcoinníollach"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr ""
 
-#: read.c:992
+#: read.c:985
 #, fuzzy
 msgid "recipe commences before first target"
 msgstr "tá orduithe ann roimh an chéad sprioc"
 
-#: read.c:1041
+#: read.c:1034
 #, fuzzy
 msgid "missing rule before recipe"
 msgstr "riail ar iarraidh roimh orduithe"
 
-#: read.c:1131
+#: read.c:1124
 #, fuzzy
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr " (Ar mhian leat TÁB in ionad ocht spás?)"
 
-#: read.c:1133
+#: read.c:1126
 #, fuzzy
 msgid "missing separator"
 msgstr "deighilteoir%s ar iarraidh"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "patrún sprice ar iarraidh"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "patrúin iomadúla sprice"
 
-#: read.c:1276
+#: read.c:1268
 #, fuzzy, c-format
 msgid "target pattern contains no '%%'"
 msgstr "níl aon `%%' sa phatrún sprice"
 
-#: read.c:1398
+#: read.c:1390
 #, fuzzy
 msgid "missing 'endif'"
 msgstr "`endif' ar iarraidh"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "ainm folamh athróige"
 
-#: read.c:1471
+#: read.c:1463
 #, fuzzy
 msgid "extraneous text after 'define' directive"
 msgstr "Téacs gan mhaith i ndiaidh treorach `endef'"
 
-#: read.c:1496
+#: read.c:1488
 #, fuzzy
 msgid "missing 'endef', unterminated 'define'"
 msgstr "`endef' ar iarraidh, `define' gan chríochnú"
 
-#: read.c:1524
+#: read.c:1516
 #, fuzzy
 msgid "extraneous text after 'endef' directive"
 msgstr "Téacs gan mhaith i ndiaidh treorach `endef'"
 
-#: read.c:1595
+#: read.c:1588
 #, fuzzy, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "Téacs gan mhaith i ndiaidh treorach `%s'"
 
-#: read.c:1596
+#: read.c:1589
 #, fuzzy, c-format
 msgid "extraneous '%s'"
 msgstr "`%s' breise"
 
-#: read.c:1624
+#: read.c:1617
 #, fuzzy
 msgid "only one 'else' per conditional"
 msgstr "ní cheadaítear ach aon `else' amháin le gach coinníollach"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Is míchumtha é an sainmhíniú athróige (le haghaidh aon sprioc amháin)"
 
-#: read.c:1957
+#: read.c:1950
 #, fuzzy
 msgid "prerequisites cannot be defined in recipes"
 msgstr "ní féidir réamhriachtanais a shonrú i scripteanna ordaithe"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "rialacha intuigthe agus rialacha statacha measctha le chéile"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "rialacha intuigthe agus gnáthrialacha measctha le chéile"
 
-#: read.c:2091
+#: read.c:2085
 #, fuzzy, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "níl an sprioc `%s' comhoiriúnach leis an phatrún sprice"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, fuzzy, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "tá iontrálacha : agus :: araon ann don chomhad sprice `%s'"
 
-#: read.c:2112
+#: read.c:2106
 #, fuzzy, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "tá an sprioc `%s' i riail amháin níos mó ná uair amháin."
 
-#: read.c:2122
+#: read.c:2116
 #, fuzzy, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "rabhadh: ag sárú na n-orduithe le haghaidh na sprice `%s'"
 
-#: read.c:2125
+#: read.c:2119
 #, fuzzy, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr ""
 "rabhadh: ag déanamh neamhshuim ar sheanorduithe le haghaidh sprice `%s'"
 
-#: read.c:2229
+#: read.c:2223
 #, fuzzy
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr "rialacha intuigthe agus gnáthrialacha measctha le chéile"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr ""
 "rabhadh: chonacthas carachtar NUL; ag déanamh neamhshuim ar an chuid eile "
 "den líne"
 
-#: remake.c:230
+#: remake.c:225
 #, fuzzy, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Níl faic le déanamh i gcomhair `%s'."
 
-#: remake.c:231
+#: remake.c:226
 #, fuzzy, c-format
 msgid "'%s' is up to date."
 msgstr "Níl gá le `%s' a nuashonrú."
 
-#: remake.c:303
+#: remake.c:322
 #, fuzzy, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Comhad `%s' á bhearradh.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr ""
 "%sNíl aon riail chun an sprioc `%s' a dhéanamh, riachtanach le haghaidh `"
 "%s'%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sNíl aon riail chun an sprioc `%s' a dhéanamh%s"
 
-#: remake.c:426
+#: remake.c:441
 #, fuzzy, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Comhad sprice `%s' idir lámha.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, fuzzy, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr ""
 "Rinneadh iarracht ar an chomhad `%s' a nuashonrú le déanaí, agus theip air.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, fuzzy, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Rinneadh scrúdú ar an chomhad `%s' cheana.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, fuzzy, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Comhad `%s' á nuashonrú fós.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, fuzzy, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Nuashonraíodh an comhad `%s'.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, fuzzy, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Níl a leithéid de chomhad `%s' ann.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, fuzzy, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
 msgstr ""
 "*** Warning: comhad .LOW_RESOLUTION_TIME `%s' le stampa ama ardtaifeach"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, fuzzy, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Aimsíodh riail intuigthe le haghaidh `%s'.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, fuzzy, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Níor aimsíodh aon riail intuigthe le haghaidh `%s'.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, fuzzy, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Ag baint úsáid as orduithe réamhshocraithe le haghaidh `%s'.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Tréigeadh an spleáchas ciorclach %s <- %s."
 
-#: remake.c:675
+#: remake.c:690
 #, fuzzy, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Críochnaíodh na réamhriachtanais den chomhad sprice `%s'.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, fuzzy, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Réamhriachtanais de `%s' á ndéanamh anois.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, fuzzy, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Ag tréigean an chomhaid sprice `%s'.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, fuzzy, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Ní dhearna an sprioc `%s' arís ós rud é go bhfuil earráidí ann."
 
-#: remake.c:752
+#: remake.c:767
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr ""
 "Sonraíonn an réamhriachtanas `%s' ord rite amháin le haghaidh sprice `%s'.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, fuzzy, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Níl an réamhriachtanas `%s' den sprioc `%s' ann.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Tá an réamhriachtanas `%s' níos nuaí ná an sprioc `%s'.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Tá an réamhriachtanas `%s' níos sine ná an sprioc `%s'.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, fuzzy, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "Tá dhá idirstad ag an sprioc `%s' agus níl aon réamhriachtanas aice.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, fuzzy, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr ""
 "Níl aon ordú le haghaidh `%s' agus níor athraigh aon réamhriachtanas.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, fuzzy, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "`%s' á dhéanamh de bharr bratach --always-make.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, fuzzy, c-format
 msgid "No need to remake target '%s'"
 msgstr "Níl gá leis an sprioc `%s' a athdhéanamh"
 
-#: remake.c:805
+#: remake.c:820
 #, fuzzy, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; ag baint úsáid as ainm VPATH `%s'"
 
-#: remake.c:825
+#: remake.c:840
 #, fuzzy, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Caithfidh an sprioc `%s' a athdhéanamh.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, fuzzy, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  Ag déanamh neamhshuim ar ainm VPATH `%s'.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, fuzzy, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Orduithe de `%s' á rith.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, fuzzy, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Theip ar athdhéanamh an sprioc-chomhaid `%s'.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, fuzzy, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "D'éirigh le hathdhéanamh an sprioc-chomhaid `%s'.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, fuzzy, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Tá gá leis an chomhad sprice `%s' a athdhéanamh leis an rogha -q.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, fuzzy, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Ag baint úsáid as orduithe réamhshocraithe le haghaidh `%s'.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Rabhadh: Tá an t-am mionathraithe den chomhad `%s' sa todhchaí"
 
-#: remake.c:1411
+#: remake.c:1443
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr ""
 "Rabhadh: Tá an t-am mionathraithe den chomhad `%s' %.2g soicind sa todhchaí"
 
-#: remake.c:1610
+#: remake.c:1646
 #, fuzzy, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "Níl eilimint .LIBPATTERNS `%s' ina patrún"
@@ -1829,7 +1817,7 @@ msgstr "N
 msgid "Customs won't export: %s\n"
 msgstr "Ní easpórtálfar Customs: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1837,7 +1825,7 @@ msgstr ""
 "\n"
 "# Rialacha Intuigthe"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1845,7 +1833,7 @@ msgstr ""
 "\n"
 "# Níl aon riail intuigthe."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1854,11 +1842,11 @@ msgstr ""
 "\n"
 "# %u riail intuigthe, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " teirminéal."
 
-#: rule.c:530
+#: rule.c:531
 #, fuzzy, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "FABHT: num_pattern_rules mícheart!  %u != %u"
@@ -2019,14 +2007,14 @@ msgstr "Iarratas ar eolas"
 msgid "Floating point co-processor not available"
 msgstr "Níl comhphróiseálaí snámhphointe ar fáil"
 
-#: strcache.c:236
+#: strcache.c:274
 #, fuzzy, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
 msgstr "%s líon na maolán strcache: %d\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2034,31 +2022,31 @@ msgid ""
 "B\n"
 msgstr "%s strcache saor: iomlán = %d / uas = %d / íos = %d / meán = %d\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:280
+#: strcache.c:319
 #, fuzzy, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s méid strcache: iomlán = %d / uas = %d / íos = %d / meán = %d\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, fuzzy, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr "%s strcache saor: iomlán = %d / uas = %d / íos = %d / meán = %d\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
 "%s strcache performance: lookups = %lu / hit rate = %lu%%\n"
 msgstr ""
 
-#: strcache.c:289
+#: strcache.c:328
 #, fuzzy
 msgid ""
 "# hash-table stats:\n"
@@ -2068,45 +2056,45 @@ msgstr ""
 "# comhaid hais-tábla stait:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "uathoibríoch"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "réamhshocraithe"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "timpeallacht"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "timpeallacht le -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "líne na n-orduithe"
 
-#: variable.c:1617
+#: variable.c:1647
 #, fuzzy
 msgid "'override' directive"
 msgstr "treoir `override'"
 
-#: variable.c:1628
+#: variable.c:1658
 #, fuzzy, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (ó `%s', líne %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# athróg tacar hais-tábla stait:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2114,7 +2102,7 @@ msgstr ""
 "\n"
 "# Athróga\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2122,7 +2110,7 @@ msgstr ""
 "\n"
 "# Luachanna Athróige sainiúil don phatrún"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2130,7 +2118,7 @@ msgstr ""
 "\n"
 "# Níl aon luach athróige atá sainiúil don phatrún."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2149,88 +2137,38 @@ msgstr "rabhadh: athr
 msgid "sys$search() failed with %d\n"
 msgstr "Theip ar sys$cuardach le %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Rabhadh: Atreorú folamh\n"
-
-#: vmsjobs.c:183
-#, fuzzy, c-format
-msgid "internal error: '%s' command_state"
-msgstr "earráid inmheánach: `%s' command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 "-rabhadh, is féidir gur gá duit ionramháil CTRL-Y a athchumasú ó DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "INSUITE [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "CD INSUITE %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "CD INSUITE %s\n"
-
-#: vmsjobs.c:505
+#: vmsjobs.c:1228
 #, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Ordú anaithnid insuite '%s'\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Earráid, ordú folamh\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Atreoraíodh ionchur ó %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Atreoraíodh earráidí go %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, fuzzy, c-format
 msgid "Append output to %s\n"
 msgstr "Atreoraíodh aschur go %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Atreoraíodh aschur go %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr ""
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "%s á rith ina áit\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Earráid le linn sceitheadh, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2238,12 +2176,12 @@ msgstr ""
 "\n"
 "# VPATH Conairí Cuardaigh\n"
 
-#: vpath.c:600
+#: vpath.c:620
 #, fuzzy
 msgid "# No 'vpath' search paths."
 msgstr "# Níl aon chonair chuardaigh `vpath'."
 
-#: vpath.c:602
+#: vpath.c:622
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2252,7 +2190,7 @@ msgstr ""
 "\n"
 "# %u conair chuardaigh `vpath'.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 #, fuzzy
 msgid ""
 "\n"
@@ -2261,7 +2199,7 @@ msgstr ""
 "\n"
 "# Níl aon chonair ghinearálta cuardaigh (athróg `VPATH')."
 
-#: vpath.c:611
+#: vpath.c:631
 #, fuzzy
 msgid ""
 "\n"
@@ -2272,18 +2210,55 @@ msgstr ""
 "# Conair ghinearálta cuardaigh (athróg `VPATH'):\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr ""
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr ""
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr ""
+
 #~ msgid "#  Invalid value in `update_status' member!"
 #~ msgstr "#  Luach neamhbhailí sa bhall `update_status'!"
 
 #~ msgid "*** [%s] Error 0x%x (ignored)"
 #~ msgstr "*** [%s] Earráid 0x%x (rinneadh neamhshuim air)"
 
+#~ msgid "*** [%s] Error 0x%x"
+#~ msgstr "*** [%s] Earráid 0x%x"
+
 #~ msgid "process_easy() failed failed to launch process (e=%ld)\n"
 #~ msgstr "theip ar process_easy(); níor tosaíodh próiseas (e=%ld)\n"
 
 #~ msgid "internal error: multiple --jobserver-fds options"
 #~ msgstr "earráid inmheánach: roghanna --jobserver-fds iomadúla"
 
+#~ msgid "dup jobserver"
+#~ msgstr "jabfhreastalaí dup"
+
 #~ msgid ""
 #~ "%sThis is free software; see the source for copying conditions.\n"
 #~ "%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
@@ -2316,8 +2291,32 @@ msgstr ""
 #~ "\n"
 #~ "%s líon na dteaghrán i strcache: %d\n"
 
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Rabhadh: Atreorú folamh\n"
+
+#~ msgid "internal error: `%s' command_state"
+#~ msgstr "earráid inmheánach: `%s' command_state"
+
 #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n"
 #~ msgstr "-rabhadh, fágfaidh CTRL-Y fo-phróisis gan ghlanadh.\n"
 
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "INSUITE [%s][%s]\n"
+
 #~ msgid "BUILTIN RM %s\n"
 #~ msgstr "RM INSUITE %s\n"
+
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Ordú anaithnid insuite '%s'\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Earráid, ordú folamh\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Atreoraíodh ionchur ó %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Atreoraíodh earráidí go %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Earráid le linn sceitheadh, %d\n"
index 209a1a4..7e086b3 100644 (file)
Binary files a/po/gl.gmo and b/po/gl.gmo differ
index 254e2a5..25f1772 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: make 3.82\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
 "PO-Revision-Date: 2012-11-12 16:40+0100\n"
 "Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
@@ -52,85 +52,85 @@ msgstr "touch: O membro «%s» non existe en «%s»"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: Código de retorno incorrecto de ar_member_touch en «%s»"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 "a chamada a lbr$set_module() fallou ao extraer a información do módulo, "
 "estado = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "a chamada a lbr$ini_control() fallou con estado = %d"
 
-#: arscan.c:255
+#: arscan.c:261
 #, fuzzy, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr "non é posíbel abrir a biblioteca «%s» para buscar o membro «%s»"
 
-#: arscan.c:944
+#: arscan.c:965
 #, fuzzy, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Membro «%s»%s: %ld bytes en %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (o nome pode quedar truncado)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Data %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, modo = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr ""
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Interrompido.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, fuzzy, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] O membro do arquivo «%s» pode non ser correcto; non eliminado"
 
-#: commands.c:633
+#: commands.c:631
 #, fuzzy, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** O membro do arquivo «%s» pode non ser correcto; non eliminado"
 
-#: commands.c:647
+#: commands.c:645
 #, fuzzy, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Eliminando o ficheiro «%s»"
 
-#: commands.c:649
+#: commands.c:647
 #, fuzzy, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Eliminando o ficheiro «%s»"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr ""
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (incorporadas):"
 
-#: commands.c:690
+#: commands.c:688
 #, fuzzy, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (desde «%s», liña %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -138,62 +138,62 @@ msgstr ""
 "\n"
 "# Directorios\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: non foi posíbel facer a operación de stat.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (clave %s, mtime %d): non foi posíbel abrir.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (dispositivo %d, inodo [%d,%d,%d]): non foi posíbel abrir.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (dispositivo %ld, inodo %ld): non foi posíbel abrir.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (clave %s, mtime %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (dispositivo %d, inodo [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (dispositivo %ld, inodo %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Non"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " ficheiros, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "non"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " imposíbeis"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " ata aquí."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " imposíbeis en %lu directorios.\n"
@@ -203,157 +203,157 @@ msgstr " imposíbeis en %lu directorios.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "A variábel recursiva «%s» fai referencia a si mesma (ao final)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "referencia a variábel non rematada"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr ""
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ""
 
-#: file.c:280
+#: file.c:287
 #, fuzzy, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "pero agora considérase que «%s» é o mesmo ficheiro que «%s»."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ""
 
-#: file.c:303
+#: file.c:310
 #, fuzzy, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "non é posíbel renomear «%s» con dous puntos a «%s» con catro puntos"
 
-#: file.c:309
+#: file.c:316
 #, fuzzy, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "non é posíbel renomear «%s» con catro puntos a «%s» con dous puntos"
 
-#: file.c:401
+#: file.c:408
 #, fuzzy, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Eliminando o ficheiro intermedio «%s»"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Retirando os ficheiros intermedios...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Hora actual"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Marca de tempo fóra de rango; substituíndo %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Non é un obxectivo:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Ficheiro precioso (prerrequisito de .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Obxectivo falso (prerrequisito de .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Obxectivo da liña de ordes."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Un ficheiro de make por defecto, MAKEFILES, ou -include/sinclude."
 
-#: file.c:968
+#: file.c:975
 #, fuzzy
 msgid "#  Builtin rule"
 msgstr ""
 "\n"
 "# Non hai regras implícitas."
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Fíxose a busca de regras implícitas."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Non se fixo a busca de regras implícitas."
 
-#: file.c:973
+#: file.c:980
 #, fuzzy, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Raíz do patrón implícito/estático: «%s»\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  O ficheiro é un prerrequisito intermedio."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Tamén se fai:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Nunca se comprobou o tempo de modificación."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  O ficheiro non existe."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  O ficheiro é moi antigo."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Última modificación: %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  O ficheiro foi actualizado."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  O ficheiro non foi actualizado."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr ""
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr ""
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Actualizado con éxito."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Ten que ser actualizado (-q está definido)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Produciuse un erro ao actualizar."
 
-#: file.c:1025
+#: file.c:1032
 #, fuzzy
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Valor non válido no membro «command_state»!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -361,7 +361,7 @@ msgstr ""
 "\n"
 "# Ficheiros"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -371,108 +371,126 @@ msgstr ""
 "# estatísticas da táboa hash de ficheiros:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr ""
 
-#: function.c:780
+#: function.c:790
 #, fuzzy
 msgid "non-numeric first argument to 'word' function"
 msgstr "primeiro argumento da función «word» non numérico"
 
-#: function.c:785
+#: function.c:795
 #, fuzzy
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "o primeiro argumento da función «word» debe ser maior que 0"
 
-#: function.c:805
+#: function.c:815
 #, fuzzy
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "primeiro argumento da función «wordlist» non numérico"
 
-#: function.c:807
+#: function.c:817
 #, fuzzy
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "segundo argumento da función «wordlist» non numérico"
 
-#: function.c:1499
+#: function.c:1525
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe(): a chamada a DuplicateHandle(In) fallou (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr ""
 "windows32_open_pipe(): a chamada a DuplicateHandle(Err) fallou (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "A chamada a CreatePipe() fallou (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): a chamada a process_init_fd() fallou\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Limpando o ficheiro de lotes temporal %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, fuzzy, c-format
 msgid "open: %s: %s"
 msgstr "%s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, fuzzy, c-format
 msgid "write: %s: %s"
 msgstr "erro de escritura: %s"
 
-#: function.c:2209
-#, c-format
-msgid "Invalid file operation: %s"
+#: function.c:2230 function.c:2267
+#, fuzzy, c-format
+msgid "close: %s: %s"
+msgstr "%s%s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
 msgstr ""
 
-#: function.c:2324
+#: function.c:2262
+#, fuzzy, c-format
+msgid "read: %s: %s"
+msgstr "%s: %s"
+
+#: function.c:2275
+#, fuzzy, c-format
+msgid "file: invalid file operation: %s"
+msgstr "%s: opción incorrecta -- %c\n"
+
+#: function.c:2390
 #, fuzzy, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "número de argumentos insuficiente (%d) na chamada á función «%s»"
 
-#: function.c:2336
+#: function.c:2402
 #, fuzzy, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "non implementada nesta plataforma: función «%s»"
 
-#: function.c:2399
+#: function.c:2466
 #, fuzzy, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "chamada á función «%s» non rematada: falta «%c»"
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
 msgstr ""
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
 msgstr ""
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
 msgstr ""
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
+msgid "Invalid minimum argument count (%u) for function %s"
 msgstr "número de argumentos insuficiente (%d) na chamada á función «%s»"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
+msgid "Invalid maximum argument count (%u) for function %s"
 msgstr "número de argumentos insuficiente (%d) na chamada á función «%s»"
 
 #: getopt.c:659
@@ -570,7 +588,7 @@ msgstr "Buscando unha regra implícita para «%s».\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Buscando unha regra implícita membro do arquivo para «%s».\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Evitando a recursión de regras implícitas.\n"
 
@@ -614,101 +632,77 @@ msgstr "Atopouse a o prerrequisito «%s» como VPATH «%s»\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Buscando unha regra co ficheiro intermedio «%s».\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Non foi posíbel crear un ficheiro temporal\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (memoria envorcada)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (ignorado)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 #, fuzzy
 msgid "<builtin>"
 msgstr " (incorporadas):"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr ""
-
-#: job.c:516 job.c:524
+#: job.c:510
 #, fuzzy, c-format
-msgid "%s[%s] Error %d%s"
+msgid "%s[%s: %s] Error %d%s"
 msgstr "*** [%s] Erro %d"
 
-#: job.c:519
-#, fuzzy, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "*** [%s] Erro 0x%x"
-
-#: job.c:529
-#, fuzzy, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s%s: %s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Agardando por traballos non rematados...."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Proceso fillo vivo %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (remoto)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Colleitando o proceso fillo perdedor %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Colleitando o proceso fillo gañador %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Limpando o ficheiro de lotes temporal %s\n"
 
-#: job.c:855
+#: job.c:845
 #, fuzzy, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Limpando o ficheiro de lotes temporal %s\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Retirando o proceso fillo %p PID %s%s da cadea.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Liberouse un elemento para o proceso fillo %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr ""
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "produciuse un erro ao iniciar process_easy() o proceso (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -717,111 +711,107 @@ msgstr ""
 "\n"
 "Contáronse %d argumentos no inicio que fallou\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Poñendo o proceso fillo %p (%s) PID %s%s na cadea.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Obtívose un elemento para o proceso fillo %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "lectura da canalización de traballos"
-
-#: job.c:2056
+#: job.c:1838
 #, fuzzy, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "touch: O arquivo «%s» non existe"
 
-#: job.c:2059
+#: job.c:1841
 #, fuzzy, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%sNon hai unha regra para facer o obxectivo «%s», que precisa «%s»%s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "non é posíbel impoñer límites de carga neste sistema operativo"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "non é posíbel impoñer un límite de carga: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr ""
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr ""
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr ""
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr ""
 "make colleitou un proceso fillo de pid %s, aínda se agarda polo pid %s\n"
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: Orde non atopada"
+
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
 msgstr "%s: Orde non atopada"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Programa para o intérprete de ordes non atopado"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr ""
 
-#: job.c:2765
+#: job.c:2584
 #, fuzzy, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "O valor de $SHELL cambiou (antes era «%s», agora é «%s»)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Creando un ficheiro por lotes temporal %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
 msgstr ""
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
 "\t%s\n"
 msgstr ""
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
@@ -852,30 +842,30 @@ msgstr ""
 msgid "Empty symbol name for load: %s"
 msgstr ""
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr ""
 
-#: load.c:244
+#: load.c:256
 #, fuzzy
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Non se admiten os traballos en paralelo (-j) nesta plataforma."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Opcións:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Ignorado por compatibilidade.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 "  -B, --always-make           Facer todos os obxectivos incondicionalmente.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -883,19 +873,19 @@ msgstr ""
 "  -C DIRECTORIO, --directory=DIRECTORIO\n"
 "                              Cambiar ao DIRECTORIO antes de facer nada.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr ""
 "  -d                          Mostrar moita información de depuración.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=MODIFICADORES]     Mostrar varios tipos de información de "
 "depuración.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -904,12 +894,12 @@ msgstr ""
 "                              As variábei de ambiente substitúen aos "
 "makefiles.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -917,15 +907,15 @@ msgstr ""
 "  -f FICHEIRO, --file=FICHEIRO, --makefile=FICHEIRO\n"
 "                              Ler o FICHEIRO como makefile.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Mostrar esta mensaxe e saír.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -934,7 +924,7 @@ msgstr ""
 "                              Buscar os makefiles incluídos\n"
 "                                 no DIRECTORIO.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -942,14 +932,14 @@ msgstr ""
 "  -j [N], --jobs[=N]          Permitir N traballos á vez; infinitos sen\n"
 "                                 un argumento.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Continuar cando no se poidan facer\n"
 "                                 algúns obxectivos.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -959,13 +949,13 @@ msgstr ""
 "                              Non iniciar varios traballos con carga\n"
 "                                superior a N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
 msgstr ""
 
-#: main.c:349
+#: main.c:374
 #, fuzzy
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
@@ -975,7 +965,7 @@ msgstr ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Non executar ningún comando; só amosalos.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -985,39 +975,39 @@ msgstr ""
 "                              Tratar o FICHEIRO como moi antigo e non "
 "refacelo.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr ""
 "  -p, --print-data-base       Mostrar a base de datos interna de make.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
 msgstr ""
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Desactivar as regras implícitas incorporadas.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables  Desactivar os valores das variábeis "
 "incorporadas.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr ""
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1025,28 +1015,28 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Desactiva -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Tocar os obxectivos no canto de os refacer.\n"
 
-#: main.c:373
+#: main.c:398
 #, fuzzy
 msgid "  --trace                     Print tracing information.\n"
 msgstr ""
 "  -d                          Mostrar moita información de depuración.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 "  -v, --version               Mostrar o número de versión de make e saír.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Mostrar o directorio actual.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1054,7 +1044,7 @@ msgstr ""
 "  --no-print-directory        Desactivar -w, incluso se se activou\n"
 "                                 implicitamente.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1063,7 +1053,7 @@ msgstr ""
 "new=FICHEIRO\n"
 "                              Tratar o FICHEIRO como infinitamente novo.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1071,27 +1061,27 @@ msgstr ""
 "  --warn-undefined-variables  Avisar cando se faga referencia a\n"
 "                                 unha variábel non definida.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "a cadea baleira non é válida como nome de ficheiro"
 
-#: main.c:737
+#: main.c:766
 #, fuzzy, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "especificación de nivel de depuración descoñecido «%s»"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr ""
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr ""
 "%s: Atrapouse unha Interrupción/Excepción (código = 0x%lx, enderezo = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1106,67 +1096,37 @@ msgstr ""
 "ExceptionFlags = %lx\n"
 "ExceptionAddress = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Violación de acceso: operación de escritura no enderezo 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Violación de acceso: operación de lectura no enderezo 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() definindo default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "A busca de rutas de find_and_set_shell() define default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s está suspendido durante 30 segundos..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "rematouse sleep(30). Continuando.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr ""
-
-#: main.c:1534
-#, fuzzy, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "erro interno: cadea --jobserver-fds non válida «%s»"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr ""
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr ""
-"aviso: -jN forzado no submake: desactivando o modo de servidor de traballos."
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "dup jobserver"
-
-#: main.c:1570
+#: main.c:1627
 #, fuzzy
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
@@ -1174,113 +1134,100 @@ msgstr ""
 "aviso: o servidor de traballos non está dispoñíbel: usando -j1. Engada «+» á "
 "regra do make pai."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr ""
+"aviso: -jN forzado no submake: desactivando o modo de servidor de traballos."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "O ficheiro de make da entrada estándar especificouse dúas veces."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (ficheiro temporal)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (ficheiro temporal)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Non se admiten os traballos en paralelo (-j) nesta plataforma."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Reiniciando para entrar no modo de traballo único (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr ""
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "creando a canalización de traballos"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "inicializar a canalización do servidor de traballos"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr ""
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Actualizando os ficheiros de make....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, fuzzy, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "O ficheiro de make «%s» podería causar un bucle; non se refai.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, fuzzy, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Produciuse un erro ao refacer o ficheiro de make «%s»."
 
-#: main.c:2257
+#: main.c:2303
 #, fuzzy, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Non se atopou o ficheiro de make incluído «%s»."
 
-#: main.c:2262
+#: main.c:2308
 #, fuzzy, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Non se atopou o ficheiro de make «%s»"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Non foi posíbel volver ao directorio orixinal."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Re-executando[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (ficheiro temporal)"
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ""
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Non se especificaron obxectivos e non se atopou un ficheiro de make"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Non hai obxectivos"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Actualizando os obxectivos meta....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "aviso: Detectáronse inconsistencias de reloxo. A operación pode quedar "
 "incompleta."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Uso: %s [opcións] [obxectivo] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1289,7 +1236,7 @@ msgstr ""
 "\n"
 "Este programa compilou para %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1298,34 +1245,34 @@ msgstr ""
 "\n"
 "Este programa compilou para %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr ""
 "Envíe informes de fallo no programa a <bug-make@gnu.org>.\n"
 "Envíe informes de fallo na tradución a <proxecto@trasno.net>.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, fuzzy, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "a opción «%s%s» require un argumento de cadea non baleira"
 
-#: main.c:2871
+#: main.c:2933
 #, fuzzy, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "a opción «-%c» require un argumento integral positivo"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sCompilado para %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sCompilado para %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1338,7 +1285,7 @@ msgstr ""
 "%sIsto é software libre: pode modificalo e redistribuílo.\n"
 "%sNon hai NINGUNHA GARANTÍA, ata onde o permita a lei.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1347,7 +1294,7 @@ msgstr ""
 "\n"
 "# Base de datos de Make, imprimida en %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1356,29 +1303,29 @@ msgstr ""
 "\n"
 "# Base de datos de Make rematada en %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Erro %d descoñecido"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: usuario %lu (real %lu), grupo %lu (real %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Acceso inicializado"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Acceso de usuario"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Acceso de make"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Acceso de fillo"
 
@@ -1441,231 +1388,272 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "creando a canalización de traballos"
+
+#: posixos.c:72 posixos.c:227
+#, fuzzy
+msgid "duping jobs pipe"
+msgstr "creando a canalización de traballos"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "inicializar a canalización do servidor de traballos"
+
+#: posixos.c:90
+#, fuzzy, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "erro interno: cadea --jobserver-fds non válida «%s»"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr ""
+
+#: posixos.c:109
+#, fuzzy
+msgid "jobserver pipeline"
+msgstr "inicializar a canalización do servidor de traballos"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr ""
+
+#: posixos.c:268
+#, fuzzy
+msgid "pselect jobs pipe"
+msgstr "lectura da canalización de traballos"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "lectura da canalización de traballos"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Lendo os ficheiros de make...\n"
 
-#: read.c:335
+#: read.c:329
 #, fuzzy, c-format
 msgid "Reading makefile '%s'"
 msgstr "Lendo o ficheiro de make «%s»"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (non hai unha meta por defecto)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (ruta de busca)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (non importa)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (non hai expansión de ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr ""
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr ""
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "sintaxe non válida no condicional"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr ""
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr ""
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr ""
 
-#: read.c:1131
+#: read.c:1124
 #, fuzzy
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr " (quixo dicir TAB no canto de 8 espazos?)"
 
-#: read.c:1133
+#: read.c:1126
 #, fuzzy
 msgid "missing separator"
 msgstr "falta un separador%s"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "falta un patrón obxectivo"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "patróns de obxectivo múltiples"
 
-#: read.c:1276
+#: read.c:1268
 #, fuzzy, c-format
 msgid "target pattern contains no '%%'"
 msgstr "o patrón obxectivo non contén «%%»"
 
-#: read.c:1398
+#: read.c:1390
 #, fuzzy
 msgid "missing 'endif'"
 msgstr "falta «endif»"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "nome de variábel baleiro"
 
-#: read.c:1471
+#: read.c:1463
 #, fuzzy
 msgid "extraneous text after 'define' directive"
 msgstr "texto superfluo trala directiva «define»"
 
-#: read.c:1496
+#: read.c:1488
 #, fuzzy
 msgid "missing 'endef', unterminated 'define'"
 msgstr "falta «endef», «define» sen rematar"
 
-#: read.c:1524
+#: read.c:1516
 #, fuzzy
 msgid "extraneous text after 'endef' directive"
 msgstr "Texto superfluo trala directiva «endef»"
 
-#: read.c:1595
+#: read.c:1588
 #, fuzzy, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "Texto superfluo trala directiva «%s»"
 
-#: read.c:1596
+#: read.c:1589
 #, fuzzy, c-format
 msgid "extraneous '%s'"
 msgstr "«%s» superfluo"
 
-#: read.c:1624
+#: read.c:1617
 #, fuzzy
 msgid "only one 'else' per conditional"
 msgstr "só un «else» por condicional"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Definición dunha variábel por obxectivo mal formada"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr ""
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "regras de patrón implícitas e estáticas mesturadas"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "regras implícitas e normais mesturadas"
 
-#: read.c:2091
+#: read.c:2085
 #, fuzzy, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "o obxectivo «%s» non coincide co patrón do obxectivo"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, fuzzy, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "o ficheiro obxectivo «%s» ten entradas : e ::"
 
-#: read.c:2112
+#: read.c:2106
 #, fuzzy, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "o obxectivo «%s» aparece máis dunha vez na mesma regra."
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr ""
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr ""
 
-#: read.c:2229
+#: read.c:2223
 #, fuzzy
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr "regras implícitas e normais mesturadas"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "aviso: viuse un carácter NUL; ignórase o resto da liña"
 
-#: remake.c:230
+#: remake.c:225
 #, fuzzy, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Non hai nada que facer para «%s»"
 
-#: remake.c:231
+#: remake.c:226
 #, fuzzy, c-format
 msgid "'%s' is up to date."
 msgstr "«%s» está actualizado."
 
-#: remake.c:303
+#: remake.c:322
 #, fuzzy, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Podando o ficheiro «%s».\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%sNon hai unha regra para facer o obxectivo «%s», que precisa «%s»%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sNon hai unha regra para facer o obxectivo «%s»%s"
 
-#: remake.c:426
+#: remake.c:441
 #, fuzzy, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Considerando o ficheiro obxectivo «%s».\n"
 
-#: remake.c:433
+#: remake.c:448
 #, fuzzy, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr ""
 "Hai pouco probouse a actualizar o ficheiro «%s» e non foi posíbel facelo.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, fuzzy, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "O ficheiro «%s» xa fora considerado.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, fuzzy, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Aínda se está actualizando o ficheiro «%s».\n"
 
-#: remake.c:458
+#: remake.c:473
 #, fuzzy, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Rematouse de actualizar o ficheiro «%s».\n"
 
-#: remake.c:487
+#: remake.c:502
 #, fuzzy, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "O ficheiro «%s» non existe.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, fuzzy, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1673,137 +1661,137 @@ msgstr ""
 "*** Aviso: o ficheiro «%s» de .LOW_RESOLUTION_TIME ten unha marca de tempo "
 "de alta resolución"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, fuzzy, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Atopouse unha regra implícita de «%s».\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, fuzzy, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Non se atopou unha regra implícita para «%s».\n"
 
-#: remake.c:516
+#: remake.c:531
 #, fuzzy, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Usando as ordes por defecto para «%s».\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "A dependencia circular %s <- %s foi eliminada."
 
-#: remake.c:675
+#: remake.c:690
 #, fuzzy, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Rematáronse os prerrequisitos do ficheiro obxectivo «%s».\n"
 
-#: remake.c:681
+#: remake.c:696
 #, fuzzy, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Están a se facer os prerrequisitos de «%s».\n"
 
-#: remake.c:695
+#: remake.c:710
 #, fuzzy, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Abandonando no ficheiro obxectivo «%s».\n"
 
-#: remake.c:700
+#: remake.c:715
 #, fuzzy, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Non se refai o obxectivo «%s» a causa dos erros."
 
-#: remake.c:752
+#: remake.c:767
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "O prerrequisito «%s» é só-orde para o obxectivo «%s».\n"
 
-#: remake.c:757
+#: remake.c:772
 #, fuzzy, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "O prerrequisito «%s» do obxectivo «%s» non existe.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "O prerrequisito «%s» é máis novo que o obxectivo «%s».\n"
 
-#: remake.c:765
+#: remake.c:780
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "O prerrequisito «%s» é máis vello que o obxectivo «%s».\n"
 
-#: remake.c:783
+#: remake.c:798
 #, fuzzy, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "O obxectivo «%s» ten catro puntos e non ten prerrequisitos.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr ""
 
-#: remake.c:795
+#: remake.c:810
 #, fuzzy, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Facendo «%s» debido á marca de sempre-facer.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, fuzzy, c-format
 msgid "No need to remake target '%s'"
 msgstr "Non é preciso refacer o obxectivo «%s»"
 
-#: remake.c:805
+#: remake.c:820
 #, fuzzy, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; usando o nome de VPATH «%s»"
 
-#: remake.c:825
+#: remake.c:840
 #, fuzzy, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Debe refacerse o obxectivo «%s».\n"
 
-#: remake.c:831
+#: remake.c:846
 #, fuzzy, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  Ignorando o nome VPATH «%s».\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr ""
 
-#: remake.c:847
+#: remake.c:862
 #, fuzzy, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Produciuse un erro ao refacer o ficheiro obxectivo «%s».\n"
 
-#: remake.c:850
+#: remake.c:865
 #, fuzzy, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "O ficheiro obxectivo «%s» foi feito de novo con éxito.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, fuzzy, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "O ficheiro obxectivo «%s» precisa refacerse con -q.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, fuzzy, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Usando as ordes por defecto para «%s».\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Aviso: O ficheiro «%s» ten un tempo de modificación no futuro"
 
-#: remake.c:1411
+#: remake.c:1443
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Aviso: O ficheiro «%s» ten un tempo de modificación %s seg no futuro"
 
-#: remake.c:1610
+#: remake.c:1646
 #, fuzzy, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "O elemento de .LIBPATTERNS «%s» non é un patrón"
@@ -1813,7 +1801,7 @@ msgstr "O elemento de .LIBPATTERNS «%s» non é un patrón"
 msgid "Customs won't export: %s\n"
 msgstr "A Aduana non exporta: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1821,7 +1809,7 @@ msgstr ""
 "\n"
 "# Regras implícitas"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1829,7 +1817,7 @@ msgstr ""
 "\n"
 "# Non hai regras implícitas."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1838,11 +1826,11 @@ msgstr ""
 "\n"
 "# %u regras implícitas, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminal."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "FALLO: num_pattern_rules é incorrecto! %u != %u"
@@ -2003,14 +1991,14 @@ msgstr "Petición de información"
 msgid "Floating point co-processor not available"
 msgstr "O coprocesador de coma flotante non está dispoñíbel"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
 msgstr ""
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2018,31 +2006,31 @@ msgid ""
 "B\n"
 msgstr ""
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr ""
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
 "%s strcache performance: lookups = %lu / hit rate = %lu%%\n"
 msgstr ""
 
-#: strcache.c:289
+#: strcache.c:328
 #, fuzzy
 msgid ""
 "# hash-table stats:\n"
@@ -2052,45 +2040,45 @@ msgstr ""
 "# estatísticas da táboa hash de ficheiros:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automático"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "por defecto"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "ambiente"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "ficheiro de make"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "ambiente baixo -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "liña de ordes"
 
-#: variable.c:1617
+#: variable.c:1647
 #, fuzzy
 msgid "'override' directive"
 msgstr "directiva «override»"
 
-#: variable.c:1628
+#: variable.c:1658
 #, fuzzy, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (desde «%s», liña %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# estatísticas da táboa hash de conxunto de variábeis:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2098,7 +2086,7 @@ msgstr ""
 "\n"
 "# Variábeis\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2106,7 +2094,7 @@ msgstr ""
 "\n"
 "# Valores de variábeis específicas do patrón"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2114,7 +2102,7 @@ msgstr ""
 "\n"
 "# Non hai valores específicos do patrón."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2133,87 +2121,37 @@ msgstr "aviso: variábel non definida «%.*s»"
 msgid "sys$search() failed with %d\n"
 msgstr "a chamada a sys$search() fallou con %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Aviso: Redirección baleira\n"
-
-#: vmsjobs.c:183
-#, fuzzy, c-format
-msgid "internal error: '%s' command_state"
-msgstr "erro interno: «%s» command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr "-aviso, pode que teña que reactivar o manexo de CTRL-Y desde o DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "BUILTIN [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "BUILTIN CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "BUILTIN CD %s\n"
-
-#: vmsjobs.c:505
+#: vmsjobs.c:1228
 #, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Orde incorporada descoñecida «%s»\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Erro, orde baleira\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Entrada redirixida desde %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Erros redirixidos a %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr ""
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Saída redirixida a %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr ""
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Executando %s no canto\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Erro ao lanzar, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2221,12 +2159,12 @@ msgstr ""
 "\n"
 "# Rutas de busca VPATH\n"
 
-#: vpath.c:600
+#: vpath.c:620
 #, fuzzy
 msgid "# No 'vpath' search paths."
 msgstr "# Non hai rutas de busca «vpath»"
 
-#: vpath.c:602
+#: vpath.c:622
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2235,7 +2173,7 @@ msgstr ""
 "\n"
 "# %u rutas de busca «vpath».\n"
 
-#: vpath.c:605
+#: vpath.c:625
 #, fuzzy
 msgid ""
 "\n"
@@ -2244,7 +2182,7 @@ msgstr ""
 "\n"
 "# Non hai unha ruta de busca xeral (variábel «VPATH»)."
 
-#: vpath.c:611
+#: vpath.c:631
 #, fuzzy
 msgid ""
 "\n"
@@ -2255,18 +2193,55 @@ msgstr ""
 "# Ruta de busca xeral (variábel «VPATH»):\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr ""
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr ""
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr ""
+
 #~ msgid "#  Invalid value in `update_status' member!"
 #~ msgstr "#  Valor non válido no membro «update_status»!"
 
 #~ msgid "*** [%s] Error 0x%x (ignored)"
 #~ msgstr "*** [%s] Erro 0x%x (ignorado)"
 
+#~ msgid "*** [%s] Error 0x%x"
+#~ msgstr "*** [%s] Erro 0x%x"
+
 #~ msgid "[%s] Error %d (ignored)"
 #~ msgstr "[%s] Erro %d (ignorado)"
 
 #~ msgid "internal error: multiple --jobserver-fds options"
 #~ msgstr "erro interno: opcións --jobserver-fds múltiples"
 
+#~ msgid "dup jobserver"
+#~ msgstr "dup jobserver"
+
 #~ msgid "virtual memory exhausted"
 #~ msgstr "memoria virtual esgotada"
 
@@ -2282,9 +2257,36 @@ msgstr ""
 #~ "# estatísticas da táboa hash strcache:\n"
 #~ "# "
 
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Aviso: Redirección baleira\n"
+
+#~ msgid "internal error: `%s' command_state"
+#~ msgstr "erro interno: «%s» command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "BUILTIN [%s][%s]\n"
+
 #~ msgid "BUILTIN RM %s\n"
 #~ msgstr "BUILTIN RM %s\n"
 
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Orde incorporada descoñecida «%s»\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Erro, orde baleira\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Entrada redirixida desde %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Erros redirixidos a %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Saída redirixida a %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Erro ao lanzar, %d\n"
+
 #~ msgid "create_child_process: DuplicateHandle(In) failed (e=%d)\n"
 #~ msgstr ""
 #~ "create_child_process: a chamada a DuplicateHandle(In) fallou (e=%d)\n"
index 0603509..6611751 100644 (file)
Binary files a/po/he.gmo and b/po/he.gmo differ
index 0de9871..94660c4 100644 (file)
--- a/po/he.po
+++ b/po/he.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: make 3.79.1\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
 "PO-Revision-Date: 2002-03-30 21:33+0300\n"
 "Last-Translator: Eli Zaretskii <eliz@gnu.org>\n"
 "Language-Team: Hebrew <eliz@gnu.org>\n"
@@ -44,66 +44,66 @@ msgstr "`%s' 
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "`%s' øåáò ïé÷ú-àì ãå÷ äøéæçä ar_member_touch :touch"
 
-#: arscan.c:124
+#: arscan.c:130
 #, fuzzy, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr "%d ñåèèñ ,lib$rset_module é\"ò ìåãåî ìò òãéî úôéìùá ïåìùë"
 
-#: arscan.c:230
+#: arscan.c:236
 #, fuzzy, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "%d ñåèèñ íò ìùëð lbr$ini_control"
 
-#: arscan.c:255
+#: arscan.c:261
 #, fuzzy, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr "(`%s' äéøôñ) `%s' øáà øåáò äéøôñ úçéúôá äì÷ú"
 
 #  These are not translated, since they belong to a test program.
-#: arscan.c:944
+#: arscan.c:965
 #, fuzzy, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Member `%s'%s: %ld bytes at %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (name might be truncated)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Date %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, mode = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr ""
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Break. ***\n"
 
-#: commands.c:629
+#: commands.c:627
 #, fuzzy, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] ÷çîéé àì ;ïé÷ú-éúìá úåéäì ìåìò `%s' ïåéëøà øáà ***"
 
-#: commands.c:633
+#: commands.c:631
 #, fuzzy, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** ÷çîéé àì ;ïé÷ú-éúìá úåéäì ìåìò `%s' ïåéëøà øáà ***"
 
-#: commands.c:647
+#: commands.c:645
 #, fuzzy, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] `%s' õáå÷ ÷çåî ***"
 
-#: commands.c:649
+#: commands.c:647
 #, fuzzy, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** `%s' õáå÷ ÷çåî ***"
@@ -111,21 +111,21 @@ msgstr "*** `%s' 
 #  I decided to retain the English text of what Make prints under -p,
 #  since it is notoriously hard to get right in right-to-left languages,
 #  and because its primary use is for programmers who write Makefiles.
-#: commands.c:685
+#: commands.c:683
 #, fuzzy
 msgid "#  recipe to execute"
 msgstr "#  commands to execute"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (built-in):"
 
-#: commands.c:690
+#: commands.c:688
 #, fuzzy, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (from `%s', line %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -133,62 +133,62 @@ msgstr ""
 "\n"
 "# Directories\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: could not be stat'd.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (key %s, mtime %d): could not be opened.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (device %ld, inode %ld): could not be opened.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (key %s, mtime %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (device %d, inode [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (device %ld, inode %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "No"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " files, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "no"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " impossibilities"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " so far."
 
-#: dir.c:1085
+#: dir.c:1167
 #, fuzzy, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " impossibilities in %u directories.\n"
@@ -198,163 +198,163 @@ msgstr " impossibilities in %u directories.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "(øáã ìù åôåñá) åîöòì äééðôäì íøåâ `%s' éáéñøå÷ø äðúùî"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "äëìäë úîééúñî äðéà äðúùîì äééðôä"
 
-#: file.c:271
+#: file.c:278
 #, fuzzy, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr ",`%s' õáå÷ øåáò úåãå÷ô åðúéð %s õáå÷á %lu äøåùá"
 
-#: file.c:276
+#: file.c:283
 #, fuzzy, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ",íéùøåôî-éúìá íéììëá ùåôéç é\"ò åàöîð `%s' õáå÷ øåáò úåãå÷ô"
 
-#: file.c:280
+#: file.c:287
 #, fuzzy, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr ".õáå÷ åúåàì äúò íéáùçð `%s' ïäå `%s' ïä íìåàå"
 
-#: file.c:283
+#: file.c:290
 #, fuzzy, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ".`%s' øåáò åìà ìò úåôéãò `%s' øåáò úåãå÷ô"
 
-#: file.c:303
+#: file.c:310
 #, fuzzy, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "`%s' íéããåá íééúåãå÷ðî `%s' íéìåôë íééúåãå÷ðì êåôäì ïúéð àì"
 
-#: file.c:309
+#: file.c:316
 #, fuzzy, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "`%s' íéìåôë íééúåãå÷ðî `%s' íéããåá íééúåãå÷ðì êåôäì ïúéð àì"
 
-#: file.c:401
+#: file.c:408
 #, fuzzy, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** `%s' íééðéá õáå÷ ÷çåî ***"
 
-#: file.c:405
+#: file.c:412
 #, fuzzy
 msgid "Removing intermediate files...\n"
 msgstr "*** `%s' íééðéá õáå÷ ÷çåî ***"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "úëøòî ïåòù"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "øúåîä íåçúì õåçî äðéäù ,%s ìù ïîæä úîéúç úà %s-á óéìçî"
 
 #  See the comment above about translations of text printed under -p.
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Not a target:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Precious file (prerequisite of .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Phony target (prerequisite of .PHONY)."
 
-#: file.c:964
+#: file.c:971
 #, fuzzy
 msgid "#  Command line target."
 msgstr "#  Command-line target."
 
-#: file.c:966
+#: file.c:973
 #, fuzzy
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  A default or MAKEFILES makefile."
 
-#: file.c:968
+#: file.c:975
 #, fuzzy
 msgid "#  Builtin rule"
 msgstr ""
 "\n"
 "# No implicit rules."
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Implicit rule search has been done."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Implicit rule search has not been done."
 
-#: file.c:973
+#: file.c:980
 #, fuzzy, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Implicit/static pattern stem: `%s'\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  File is an intermediate prerequisite."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Also makes:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Modification time never checked."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  File does not exist."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  File is very old."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Last modified %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  File has been updated."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  File has not been updated."
 
-#: file.c:1001
+#: file.c:1008
 #, fuzzy
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Commands currently running (THIS IS A BUG)."
 
-#: file.c:1004
+#: file.c:1011
 #, fuzzy
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Dependencies commands running (THIS IS A BUG)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Successfully updated."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Needs to be updated (-q is set)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Failed to be updated."
 
-#: file.c:1025
+#: file.c:1032
 #, fuzzy
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Invalid value in `command_state' member!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -362,115 +362,133 @@ msgstr ""
 "\n"
 "# Files"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
 "# "
 msgstr ""
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr ""
 
-#: function.c:780
+#: function.c:790
 #, fuzzy
 msgid "non-numeric first argument to 'word' function"
 msgstr "øôñî åðéà `word' úééö÷ðåôì ïåùàø èðîåâøà"
 
-#: function.c:785
+#: function.c:795
 #, fuzzy
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "éáåéç úåéäì áééç `word' úééö÷ðåôì ïåùàø èðîåâøà"
 
-#: function.c:805
+#: function.c:815
 #, fuzzy
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "øôñî åðéà `wordlist' úééö÷ðåôì ïåùàø èðîåâøà"
 
-#: function.c:807
+#: function.c:817
 #, fuzzy
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "øôñî åðéà `wordlist' úééö÷ðåôì éðù èðîåâøà"
 
-#: function.c:1499
+#: function.c:1525
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "create_child_process: DuplicateHandle(In) failed (e=%d)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "create_child_process: DuplicateHandle(Err) failed (e=%d)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, fuzzy, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() failed (e=%d)\n"
 
-#: function.c:1538
+#: function.c:1564
 #, fuzzy
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe (): process_init_fd() failed\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "`%s' éðîæ batch õáå÷ ÷ìñî\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr ""
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr ""
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
 #, c-format
-msgid "Invalid file operation: %s"
+msgid "close: %s: %s"
 msgstr ""
 
-#: function.c:2324
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr ""
+
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr ""
+
+#: function.c:2275
+#, fuzzy, c-format
+msgid "file: invalid file operation: %s"
+msgstr "%s úéðëú øåáò éåâù ïééôàî -- %c\n"
+
+#: function.c:2390
 #, fuzzy, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "÷ôñî åðéàù (%d) íéèðîåâøà øôñî íò äàø÷ð `%s' äéö÷ðåô"
 
-#: function.c:2336
+#: function.c:2402
 #, fuzzy, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "åæ úëøòîá úùîåîî äðéà `%s' äéö÷ðåô"
 
-#: function.c:2399
+#: function.c:2466
 #, fuzzy, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "`%s' äéö÷ðåôì äàéø÷á `%c' øñç"
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
 msgstr ""
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
 msgstr ""
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
 msgstr ""
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
+msgid "Invalid minimum argument count (%u) for function %s"
 msgstr "÷ôñî åðéàù (%d) íéèðîåâøà øôñî íò äàø÷ð `%s' äéö÷ðåô"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
+msgid "Invalid maximum argument count (%u) for function %s"
 msgstr "÷ôñî åðéàù (%d) íéèðîåâøà øôñî íò äàø÷ð `%s' äéö÷ðåô"
 
 #: getopt.c:659
@@ -568,7 +586,7 @@ msgstr ".`%s' 
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr ".`%s' øåáò ïåéëøà éøáàì ùøåôî-éúìá ììë ùôçî\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr ".úùøåôî-éúìá äéñøå÷øî òðîð\n"
 
@@ -612,105 +630,79 @@ msgstr "`%s' 
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr ".`%s' éðîæ õáå÷ íò ììë ùôçî\n"
 
-#: job.c:361
+#: job.c:363
 #, fuzzy
 msgid "Cannot create a temporary file\n"
 msgstr "fwrite (temporary file)"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (core õáå÷á íùøð ïåøëæä ïëåú)"
 
-#: job.c:488
+#: job.c:490
 #, fuzzy
 msgid " (ignored)"
 msgstr "[%s] %d äì÷úî éúîìòúä"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 #, fuzzy
 msgid "<builtin>"
 msgstr " (built-in):"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr ""
-
-#: job.c:516 job.c:524
+#: job.c:510
 #, fuzzy, c-format
-msgid "%s[%s] Error %d%s"
+msgid "%s[%s: %s] Error %d%s"
 msgstr "*** [%s] %d äì÷ú"
 
-#: job.c:519
-#, fuzzy, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "*** [%s] 0x%x äì÷ú ***"
-
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr ""
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** ...åîééúñð íøèù úåãåáòì ïéúîî"
 
-#: job.c:651
+#: job.c:629
 #, fuzzy, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "äöø 0x%08lx (%s) PID=%ld %s úá-úéðëú\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr "(ú÷çåøî)"
 
-#: job.c:841
+#: job.c:831
 #, fuzzy, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "äìùëðù 0x%08lx PID=%ld %s úá-úéðëú óñåà\n"
 
-#: job.c:842
+#: job.c:832
 #, fuzzy, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "äçéìöäù 0x%08lx PID=%ld %s úá-úéðëú óñåà\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "`%s' éðîæ batch õáå÷ ÷ìñî\n"
 
-#: job.c:855
+#: job.c:845
 #, fuzzy, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "`%s' éðîæ batch õáå÷ ÷ìñî\n"
 
-#: job.c:961
+#: job.c:951
 #, fuzzy, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr ".úåãåáò úøùøùî 0x%08lx PID=%ld %s úá-úéðëú ÷éçøî\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, fuzzy, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr ".øøçåù 0x%08lx (%s) úá-úéðëú øåáò ïåîéñàä\n"
 
-#  Here and elsewhere leading strings passed to perror are not translated,
-#  since they will be followed by an error message in English.
-#: job.c:1036
-msgid "write jobserver"
-msgstr "write jobserver"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, fuzzy, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "(e=%d) úéðëú-úú øåâéùá ìùëð process_easy()\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -719,110 +711,106 @@ msgstr ""
 "\n"
 "ìùëðù øåâéùá åðîð íéèðîåâøà %d\n"
 
-#: job.c:1735
+#: job.c:1581
 #, fuzzy, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr ".úåãåáò úøùøùì 0x%08lx (%s) PID=%ld %s úá-úéðëú óøöî\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:2019
+#: job.c:1811
 #, fuzzy, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr ".0x%08lx (%s) úá-úéðëú øåáò ïåîéñà ìá÷úä\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "read jobs pipe"
-
-#: job.c:2056
+#: job.c:1838
 #, fuzzy, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "íéé÷ åðéà `%s' ïåéëøà õáå÷ :touch"
 
-#: job.c:2059
+#: job.c:1841
 #, fuzzy, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%säúééðáì íéììë ïéà êà ,`%s' úùøåã `%s'%s äøèî"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "åæ úëøòîá ñîåò úåìáâî úåôëì ïúéð àì"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "cannot enforce load limit: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr ""
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr ""
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr ""
 
-#: job.c:2420
+#: job.c:2234
 #, fuzzy, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "äôñàð pid %d úá-úéðëú ,pid %d-ì äëçî ïééãò\n"
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "äàöîð àì åæ äãå÷ô :%s"
+
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
 msgstr "äàöîð àì åæ äãå÷ô :%s"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "äàöîð àì shell úãå÷ô :%s"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr ""
 
-#: job.c:2765
+#: job.c:2584
 #, fuzzy, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "(`%s' äéä íãå÷ ,`%s' åéùëò) äðúùä $SHELL ìù åëøò"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "`%s' éðîæ batch õáå÷ øöåé\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
 msgstr ""
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
 "\t%s\n"
 msgstr ""
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
@@ -852,216 +840,216 @@ msgstr ""
 msgid "Empty symbol name for load: %s"
 msgstr ""
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr ""
 
-#: load.c:244
+#: load.c:256
 #, fuzzy
 msgid "The 'load' operation is not supported on this platform."
 msgstr ".åæ úëøòîá êîúð åðéà (-j) éìéá÷î òåöéá"
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "                                             :íéðééôàî\n"
 
-#: main.c:314
+#: main.c:339
 #, fuzzy
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "úåîéàú ïòîì èîùåî"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
 msgstr ""
 
-#: main.c:321
+#: main.c:346
 #, fuzzy
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "úåàéâù éåôéð úáåèì òãéî ìù òôù âöä"
 
-#: main.c:323
+#: main.c:348
 #, fuzzy
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr "úåàéâù éåôéð úáåèì òãéî ìù íéðåù íéâåñ âöä"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
 msgstr ""
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
 msgstr ""
 
-#: main.c:333
+#: main.c:358
 #, fuzzy
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "úéðëúäî àöå äæ äøæò êñî âöä"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
 msgstr ""
 
-#: main.c:340
+#: main.c:365
 #, fuzzy
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
 msgstr "äìáâî ïéà èðîåâøà àìì ;úéðîæ-åá úåãåáò N-î øúåé àì"
 
-#: main.c:342
+#: main.c:367
 #, fuzzy
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr "äéðáì úåðúéð ïðéà úåøèîäî äîë íà åìéôà êùîä"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
 "N.\n"
 msgstr ""
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
 msgstr ""
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
 "them.\n"
 msgstr ""
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
 "it.\n"
 msgstr ""
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
 
-#: main.c:358
+#: main.c:383
 #, fuzzy
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "Make ìù éîéðô íéðåúð ñéñá âöä"
 
-#: main.c:360
+#: main.c:385
 #, fuzzy
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
 msgstr "úðëãåòî äøèî íàá øîåà äàéöé ãå÷ ;úåãå÷ô õéøú ìà"
 
-#: main.c:362
+#: main.c:387
 #, fuzzy
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr "íéùøåôî-éúìá íéðáåî íéììë ìøèð"
 
-#: main.c:364
+#: main.c:389
 #, fuzzy
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr "íéðúùî ìù úåðáåî úåøãâä ìøèð"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr ""
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
 msgstr ""
 
-#: main.c:371
+#: main.c:396
 #, fuzzy
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr "ïúåðáì íå÷îá úåøèî ìù ïîæ úîéúç ïëãò"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr ""
 
-#: main.c:375
+#: main.c:400
 #, fuzzy
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr "úéðëúäî àöå Make ìù àñøéâ øôñî âöä"
 
-#: main.c:377
+#: main.c:402
 #, fuzzy
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "úéçëåð äé÷éú íù âöä"
 
-#: main.c:379
+#: main.c:404
 #, fuzzy
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
 msgstr "ùøåôîá ïéåö àåä íà åìéôà -w ìèá"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
 msgstr ""
 
-#: main.c:384
+#: main.c:409
 #, fuzzy
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
 msgstr "øãâåä àìù äðúùîì äééðôä äø÷îá äøäæà âöä"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "õáå÷ íùë úìá÷úî äðéà ä÷éø úæåøçî"
 
-#: main.c:737
+#: main.c:766
 #, fuzzy, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "úåàéâù éåôéðì òãéî ìù `%s' øëåî-éúìá ïééôàî"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr ""
 
-#: main.c:828
+#: main.c:861
 #, fuzzy, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s úéðëúá (code = 0x%x, addr = 0x%x) äâéøç åà ä÷éñô\n"
 
-#: main.c:835
+#: main.c:868
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -1076,220 +1064,177 @@ msgstr ""
 "ExceptionFlags = %x\n"
 "ExceptionAddress = %x\n"
 
-#: main.c:843
+#: main.c:876
 #, fuzzy, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "%x úáåúëì äáéúë :ïåøëæì äùéâ úì÷ú\n"
 
-#: main.c:844
+#: main.c:877
 #, fuzzy, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "%x úáåúëî äàéø÷ :ïåøëæì äùéâ úì÷ú\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, fuzzy, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell setting default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, fuzzy, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "find_and_set_shell path search set default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr ".úåéðù 30 ìù %s úééäùä"
 
 #  Pay attention: this is written to the _right_ of the previous string,
 #  but should look like a single sentence together with it.
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr " äîééúñð\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr ""
-
-#: main.c:1534
-#, fuzzy, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "--jobserver-fds ïééôàîá `%s' äéåâù úæåøçî :úéîéðô äðëú úì÷ú"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr ""
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr "jobserver ïôåà ìèáî ;-jN áééçî Make-úú :äøäæà"
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "dup jobserver"
-
-#: main.c:1570
+#: main.c:1627
 #, fuzzy
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
 ".Make ìù áàä ììëì `+' óñåä .-j1-á ùåîéù äùòéé ;ïéîæ åðéà jobserver :äøäæà"
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr "jobserver ïôåà ìèáî ;-jN áééçî Make-úú :äøäæà"
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr ".úçà íòôî øúåé ïúéð éð÷ú èì÷ õåøòî Makefile"
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (temporary file)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (temporary file)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr ".åæ úëøòîá êîúð åðéà (-j) éìéá÷î òåöéá"
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr ".(-j1) éúøãñ ïôåàá åòöåáé úåãå÷ô"
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr ""
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "creating jobs pipe"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "init jobserver pipe"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr ""
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "...makefile éöá÷ ïëãòî\n"
 
-#: main.c:2158
+#: main.c:2195
 #, fuzzy, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr ".ùãçî åøöééìî òðîð ;úéôåñðéà äàìåì øåöéì ìåìò `%s' Makefile\n"
 
-#: main.c:2237
+#: main.c:2283
 #, fuzzy, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr ".`%s' makefile ìù ùãçî-äøéöéá äì÷ú"
 
-#: main.c:2257
+#: main.c:2303
 #, fuzzy, c-format
 msgid "Included makefile '%s' was not found."
 msgstr ".àöîð àì `%s' ììëåî makefile"
 
-#: main.c:2262
+#: main.c:2308
 #, fuzzy, c-format
 msgid "Makefile '%s' was not found"
 msgstr "àöîð àì `%s' Makefile"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr ".úéøå÷îä äé÷éúì øåæçì ïúéð àì"
 
-#: main.c:2343
+#: main.c:2384
 #, fuzzy, c-format
 msgid "Re-executing[%u]:"
 msgstr "Re-executing:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (temporary file): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ""
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "makefile éöá÷ åàöîð àìå úåøèî ïåéö ïéà"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "úåøèî ïéà"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "...ãòé úåøèî ïëãòî\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ".äîìù àì úåéäì äìåìò äéðáä .ïåòù úùéìâ äúìâúð :úåøéäæ"
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "%s [íéðééôàî] [äøèî] ...  :ùåîéù ïôåà\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
 "This program built for %s\n"
 msgstr ""
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
 "This program built for %s (%s)\n"
 msgstr ""
 
-#: main.c:2721
+#: main.c:2783
 #, fuzzy, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr ""
 "\n"
 ".<bug-make@gnu.org>-ì äì÷ú éçååéã çåìùì àð\n"
 
-#: main.c:2807
+#: main.c:2869
 #, fuzzy, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "éáåéçå íìù èðîåâøà áééçî `-%c' ïééôàî"
 
-#: main.c:2871
+#: main.c:2933
 #, fuzzy, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "éáåéçå íìù èðîåâøà áééçî `-%c' ïééôàî"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr ""
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr ""
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1298,7 +1243,7 @@ msgid ""
 "%sThere is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1307,7 +1252,7 @@ msgstr ""
 "\n"
 "# Make data base, printed on %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1316,30 +1261,30 @@ msgstr ""
 "\n"
 "# Finished Make data base on %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Unknown error %d"
 
-#: misc.c:522
+#: misc.c:508
 #, fuzzy, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s access: user %lu (real %lu), group %lu (real %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 #, fuzzy
 msgid "Initialized access"
 msgstr "Initialized"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr ""
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr ""
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr ""
 
@@ -1401,369 +1346,412 @@ msgstr ""
 msgid "%s: %s"
 msgstr ""
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "creating jobs pipe"
+
+#: posixos.c:72 posixos.c:227
+#, fuzzy
+msgid "duping jobs pipe"
+msgstr "creating jobs pipe"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "init jobserver pipe"
+
+#: posixos.c:90
+#, fuzzy, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "--jobserver-fds ïééôàîá `%s' äéåâù úæåøçî :úéîéðô äðëú úì÷ú"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr ""
+
+#: posixos.c:109
+#, fuzzy
+msgid "jobserver pipeline"
+msgstr "init jobserver pipe"
+
+#  Here and elsewhere leading strings passed to perror are not translated,
+#  since they will be followed by an error message in English.
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "write jobserver"
+
+#: posixos.c:268
+#, fuzzy
+msgid "pselect jobs pipe"
+msgstr "read jobs pipe"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "read jobs pipe"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "...makefile éöá÷ àøå÷\n"
 
-#: read.c:335
+#: read.c:329
 #, fuzzy, c-format
 msgid "Reading makefile '%s'"
 msgstr "Reading makefile `%s'"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (no default goal)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (search path)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (don't care)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (no ~ expansion)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr ""
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr ""
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "éàðú ìù éåâù øéáçú"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr ""
 
-#: read.c:992
+#: read.c:985
 #, fuzzy
 msgid "recipe commences before first target"
 msgstr "äðåùàø äøèî éðôì úåìéçúî úåãå÷ô"
 
-#: read.c:1041
+#: read.c:1034
 #, fuzzy
 msgid "missing rule before recipe"
 msgstr "ïäéðôì ììë àìì úåãå÷ô"
 
-#: read.c:1131
+#: read.c:1124
 #, fuzzy
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr "(?íéçååø 8 íå÷îá TAB-ì úðååëúä íàä) "
 
-#: read.c:1133
+#: read.c:1126
 #, fuzzy
 msgid "missing separator"
 msgstr "%sãéøôî øñç"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "äøèî úéðáú ïéà"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "úåáåøî äøèî úåéðáú"
 
-#: read.c:1276
+#: read.c:1268
 #, fuzzy, c-format
 msgid "target pattern contains no '%%'"
 msgstr "`%%' àìì äøèî úéðáú"
 
-#: read.c:1398
+#: read.c:1390
 #, fuzzy
 msgid "missing 'endif'"
 msgstr "øñç `endif'"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "÷éø äðúùî íù"
 
-#: read.c:1471
+#: read.c:1463
 #, fuzzy
 msgid "extraneous text after 'define' directive"
 msgstr "`endef' úàøåä éøçà øúåéî èñ÷è"
 
-#: read.c:1496
+#: read.c:1488
 #, fuzzy
 msgid "missing 'endef', unterminated 'define'"
 msgstr "íåéñ àìì `define' úàøåä ,øñç `endef'"
 
-#: read.c:1524
+#: read.c:1516
 #, fuzzy
 msgid "extraneous text after 'endef' directive"
 msgstr "`endef' úàøåä éøçà øúåéî èñ÷è"
 
-#: read.c:1595
+#: read.c:1588
 #, fuzzy, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "`%s' úàøåä éøçà øúåéî èñ÷è"
 
-#: read.c:1596
+#: read.c:1589
 #, fuzzy, c-format
 msgid "extraneous '%s'"
 msgstr "øúåéî `%s'"
 
-#: read.c:1624
+#: read.c:1617
 #, fuzzy
 msgid "only one 'else' per conditional"
 msgstr "éàðú ìëì ãéçé `else' ÷ø øúåî"
 
-#: read.c:1899
+#: read.c:1892
 #, fuzzy
 msgid "Malformed target-specific variable definition"
 msgstr "äøèîì éôéöôñ äðúùî ìù äéåâù äøãâä"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr ""
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "íéùøåôî-éúìáå íééèèñ úéðáú éììë ìù áåáøò"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "íéùøåôî-éúìáå íéìéâø íéììë ìù áåáøò"
 
-#: read.c:2091
+#: read.c:2085
 #, fuzzy, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "ãòéä úéðáú úà úîàåú äðéà `%s' äøèî"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, fuzzy, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr ":: ïäå : âåñî ïä íéììë ùé `%s' äøèî õáå÷ì"
 
-#: read.c:2112
+#: read.c:2106
 #, fuzzy, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr ".ììë åúåàá úçà íòôî øúåé äòéôåî `%s' äøèî"
 
-#: read.c:2122
+#: read.c:2116
 #, fuzzy, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "`%s' äøèî øåáò úåãå÷ô ñøåã :úåøéäæ"
 
-#: read.c:2125
+#: read.c:2119
 #, fuzzy, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "`%s' äøèî øåáò úåîãå÷ úåãå÷ôî íìòúî :úåøéäæ"
 
-#: read.c:2229
+#: read.c:2223
 #, fuzzy
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr "íéùøåôî-éúìáå íéìéâø íéììë ìù áåáøò"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "äçðæð äøåùä úøúé ;NUL åú éúùâô :äøäæà"
 
-#: remake.c:230
+#: remake.c:225
 #, fuzzy, c-format
 msgid "Nothing to be done for '%s'."
 msgstr ".`%s øåáò úåùòì äî ïéà"
 
-#: remake.c:231
+#: remake.c:226
 #, fuzzy, c-format
 msgid "'%s' is up to date."
 msgstr ".éðëãò øáë `%s'"
 
-#: remake.c:303
+#: remake.c:322
 #, fuzzy, c-format
 msgid "Pruning file '%s'.\n"
 msgstr ".`%s' øåáò úåéåìú óøâ õö÷î\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%säúééðáì íéììë ïéà êà ,`%s' úùøåã `%s'%s äøèî"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%s`%s'%s äøèî úééðáì íéììë ïéà"
 
-#: remake.c:426
+#: remake.c:441
 #, fuzzy, c-format
 msgid "Considering target file '%s'.\n"
 msgstr ".`%s' äøèî õáå÷ ïçåá\n"
 
-#: remake.c:433
+#: remake.c:448
 #, fuzzy, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr ".`%s' õáå÷ ïåëãòá éúìùëðå éúéñéð ïîæî àì\n"
 
-#: remake.c:445
+#: remake.c:460
 #, fuzzy, c-format
 msgid "File '%s' was considered already.\n"
 msgstr ".ïë-éðôì ïçáð øáë `%s' õáå÷\n"
 
-#: remake.c:455
+#: remake.c:470
 #, fuzzy, c-format
 msgid "Still updating file '%s'.\n"
 msgstr ".`%s' õáå÷ ïëãòî ïééãò\n"
 
-#: remake.c:458
+#: remake.c:473
 #, fuzzy, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr ".`%s' õáå÷ ïëãòì éúîééñ\n"
 
-#: remake.c:487
+#: remake.c:502
 #, fuzzy, c-format
 msgid "File '%s' does not exist.\n"
 msgstr ".íéé÷ åðéà `%s' õáå÷\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
 msgstr ""
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, fuzzy, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr ".`%s' øåáò ùøåôî-éúìá ììë éúàöî\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, fuzzy, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr ".`%s' øåáò íéùøåôî-éúìá íéììë åàöîð àì\n"
 
-#: remake.c:516
+#: remake.c:531
 #, fuzzy, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr ".`%s' øåáò ìãçî úøéøá úåãå÷ôá ùîúùî\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr ".%s <- %s úéìâòî ìåìú èéîùî"
 
-#: remake.c:675
+#: remake.c:690
 #, fuzzy, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr ".`%s' äøèî õáå÷ ìù íã÷-úåùéøã íò éúîééñ\n"
 
-#: remake.c:681
+#: remake.c:696
 #, fuzzy, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr ".äéðáá `%s' ìù íã÷ä úåùéøã\n"
 
-#: remake.c:695
+#: remake.c:710
 #, fuzzy, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr ".`%s' äøèî õáå÷ éáâì íééãé éúîøä\n"
 
-#: remake.c:700
+#: remake.c:715
 #, fuzzy, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr ".úåàéâù á÷ò ùãçî äúðáð àì `%s' äøèî"
 
-#: remake.c:752
+#: remake.c:767
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr ".`%s' íã÷ä úùéøãî äùãç `%s' äøèî\n"
 
-#: remake.c:757
+#: remake.c:772
 #, fuzzy, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr ".íéé÷ åðéàù `%s' éàðúë úùøåã `%s' äøèî\n"
 
-#: remake.c:762
+#: remake.c:777
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr ".`%s' íã÷ä úùéøãî äðùé `%s' äøèî\n"
 
-#: remake.c:765
+#: remake.c:780
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr ".`%s' íã÷ä úùéøãî äùãç `%s' äøèî\n"
 
-#: remake.c:783
+#: remake.c:798
 #, fuzzy, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr ".íã÷ úåùéøã àììå íéìåôë íééúåãå÷ð íò äðéä `%s' äøèî\n"
 
-#: remake.c:790
+#: remake.c:805
 #, fuzzy, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr ".äùòîì äúðúùä àì íã÷ úùéøã óàå `%s' øåáò úåãå÷ô ïéà\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr ""
 
-#: remake.c:803
+#: remake.c:818
 #, fuzzy, c-format
 msgid "No need to remake target '%s'"
 msgstr "`%s' äøèî ùãçî úåðáì êøåö ïéà"
 
-#: remake.c:805
+#: remake.c:820
 #, fuzzy, c-format
 msgid "; using VPATH name '%s'"
 msgstr " (`%s' :VPATH õáå÷ íù)"
 
-#: remake.c:825
+#: remake.c:840
 #, fuzzy, c-format
 msgid "Must remake target '%s'.\n"
 msgstr ".`%s' äøèî ùãçî úåðáì áééç\n"
 
-#: remake.c:831
+#: remake.c:846
 #, fuzzy, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  .`%s' VPATH íùî íìòúî\n"
 
-#: remake.c:840
+#: remake.c:855
 #, fuzzy, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr ".`%s' øåáò úåãå÷ô õéøî\n"
 
-#: remake.c:847
+#: remake.c:862
 #, fuzzy, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr ".ùãçî `%s' úåðáì ïåéñð ìùëð\n"
 
-#: remake.c:850
+#: remake.c:865
 #, fuzzy, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr ".`%s' ùãçî úééðáá äçìöä\n"
 
-#: remake.c:853
+#: remake.c:868
 #, fuzzy, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr ".-q íò úåðáéäì êéøö `%s' äøèî õáå÷\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, fuzzy, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr ".`%s' øåáò ìãçî úøéøá úåãå÷ôá ùîúùî\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "*** `%s' õáå÷ øåáò (%s > %s) ãéúòá åðéä ïåøçà éåðéù ïîæ :äøäæà ***"
 
-#: remake.c:1411
+#: remake.c:1443
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "*** `%s' õáå÷ øåáò (%s > %s) ãéúòá åðéä ïåøçà éåðéù ïîæ :äøäæà ***"
 
-#: remake.c:1610
+#: remake.c:1646
 #, fuzzy, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "úéðáú åðéà .LIBPATTERNS ìù `%s' èðîìà"
@@ -1773,7 +1761,7 @@ msgstr "
 msgid "Customs won't export: %s\n"
 msgstr "%s àöééî åðéà Customs\n"
 
-#: rule.c:495
+#: rule.c:496
 #, fuzzy
 msgid ""
 "\n"
@@ -1782,7 +1770,7 @@ msgstr ""
 "\n"
 "# No implicit rules."
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1790,7 +1778,7 @@ msgstr ""
 "\n"
 "# No implicit rules."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1799,11 +1787,11 @@ msgstr ""
 "\n"
 "# %u implicit rules, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminal."
 
-#: rule.c:530
+#: rule.c:531
 #, fuzzy, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "BUG: num_pattern_rules wrong!  %u != %u"
@@ -1965,14 +1953,14 @@ msgstr "Information request"
 msgid "Floating point co-processor not available"
 msgstr "Floating point co-processor not available"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
 msgstr ""
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -1980,77 +1968,77 @@ msgid ""
 "B\n"
 msgstr ""
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr ""
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
 "%s strcache performance: lookups = %lu / hit rate = %lu%%\n"
 msgstr ""
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
 msgstr ""
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automatic"
 
 #  These are printed under -p, so they are left in English.
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "default"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "environment"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "environment under -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "command line"
 
-#: variable.c:1617
+#: variable.c:1647
 #, fuzzy
 msgid "'override' directive"
 msgstr "`override' directive"
 
-#: variable.c:1628
+#: variable.c:1658
 #, fuzzy, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (from `%s', line %lu):\n"
 
-#: variable.c:1691
+#: variable.c:1721
 #, fuzzy
 msgid "# variable set hash-table stats:\n"
 msgstr "# %u variables in %u hash buckets.\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2058,7 +2046,7 @@ msgstr ""
 "\n"
 "# Variables\n"
 
-#: variable.c:1706
+#: variable.c:1736
 #, fuzzy
 msgid ""
 "\n"
@@ -2067,7 +2055,7 @@ msgstr ""
 "\n"
 "# Pattern-specific variable values"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2075,7 +2063,7 @@ msgstr ""
 "\n"
 "# No pattern-specific variable values."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2094,87 +2082,37 @@ msgstr "`%.*s' 
 msgid "sys$search() failed with %d\n"
 msgstr "%d íò ìùëð sys$search\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "ä÷éø äééðôä :úåøéäæ\n"
-
-#: vmsjobs.c:183
-#, fuzzy, c-format
-msgid "internal error: '%s' command_state"
-msgstr "command_state `%s' :úéîéðô äðëú úì÷ú"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ".DCL-î CTRL-Y-á ìåôéè øåùôéàá êøåö úåéäì ìåìò :úåøéäæ\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "BUILTIN [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "BUILTIN CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "BUILTIN CD %s\n"
-
-#: vmsjobs.c:505
+#: vmsjobs.c:1228
 #, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "úøëåî äðéà '%s'úéðáåî äãå÷ô\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "ä÷éø äãå÷ô :äì÷ú\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "%s-î èì÷ úééðôä\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "%s-ì úåàéâù úééðôä\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, fuzzy, c-format
 msgid "Append output to %s\n"
 msgstr "%s-ì èìô úééðôä\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "%s-ì èìô úééðôä\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr ""
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "%s õéøî úàæ íå÷îá\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "%d :úá-úéðëú úìòôäá äì÷ú\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2182,12 +2120,12 @@ msgstr ""
 "\n"
 "# VPATH Search Paths\n"
 
-#: vpath.c:600
+#: vpath.c:620
 #, fuzzy
 msgid "# No 'vpath' search paths."
 msgstr "# No `vpath' search paths."
 
-#: vpath.c:602
+#: vpath.c:622
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2196,7 +2134,7 @@ msgstr ""
 "\n"
 "# %u `vpath' search paths.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 #, fuzzy
 msgid ""
 "\n"
@@ -2205,7 +2143,7 @@ msgstr ""
 "\n"
 "# No general (`VPATH' variable) search path."
 
-#: vpath.c:611
+#: vpath.c:631
 #, fuzzy
 msgid ""
 "\n"
@@ -2216,6 +2154,37 @@ msgstr ""
 "# General (`VPATH' variable) search path:\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr ""
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr ""
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr ""
+
 #~ msgid "#  Invalid value in `update_status' member!"
 #~ msgstr "#  Invalid value in `update_status' member!"
 
@@ -2239,18 +2208,45 @@ msgstr ""
 #~ msgid "*** [%s] Error 0x%x (ignored)"
 #~ msgstr "*** [%s] 0x%x äì÷úî éúîìòúä ***"
 
+#~ msgid "*** [%s] Error 0x%x"
+#~ msgstr "*** [%s] 0x%x äì÷ú ***"
+
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "ä÷éø äééðôä :úåøéäæ\n"
+
 #~ msgid "Syntax error, still inside '\"'\n"
 #~ msgstr "'\"' êåúá ïééãò ,øéáçú úàéâù\n"
 
 #~ msgid "Got a SIGCHLD; %u unreaped children.\n"
 #~ msgstr ".åôñàð íøèù úá-úåéðëú %u ;SIGCHLD ìá÷úä\n"
 
+#~ msgid "internal error: `%s' command_state"
+#~ msgstr "command_state `%s' :úéîéðô äðëú úì÷ú"
+
 #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n"
 #~ msgstr ".úåìéòô úá-úåéðëú øéàùäì ìåìò CTRL-Y :úåøéäæ\n"
 
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "BUILTIN [%s][%s]\n"
+
 #~ msgid "BUILTIN RM %s\n"
 #~ msgstr "BUILTIN RM %s\n"
 
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "úøëåî äðéà '%s'úéðáåî äãå÷ô\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "ä÷éø äãå÷ô :äì÷ú\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "%s-î èì÷ úééðôä\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "%s-ì úåàéâù úééðôä\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "%d :úá-úéðëú úìòôäá äì÷ú\n"
+
 #~ msgid "DIRECTORY"
 #~ msgstr "DIRECTORY"
 
@@ -2305,6 +2301,9 @@ msgstr ""
 #~ msgid "internal error: multiple --jobserver-fds options"
 #~ msgstr "íéáåøî --jobserver-fds éðééôàî :úéîéðô äðëú úì÷ú"
 
+#~ msgid "dup jobserver"
+#~ msgstr "dup jobserver"
+
 #~ msgid ""
 #~ ", by Richard Stallman and Roland McGrath.\n"
 #~ "%sBuilt for %s\n"
index 6340916..af2c519 100644 (file)
Binary files a/po/hr.gmo and b/po/hr.gmo differ
index 36db598..5403a16 100644 (file)
--- a/po/hr.po
+++ b/po/hr.po
@@ -1,16 +1,35 @@
 # Translation of make to Croatian.
-# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copyright © 2016 Free Software Foundation, Inc.
 # This file is distributed under the same license as the make package.
+# directive → direktiva (ne prevoditi kao „naredba“)
+# hash → hash (ostaviti engl.)
+# chain → lanac
+# jobserver → poslužitelj poslova, djelitelj zadataka
+# make (verb) → napraviti, praviti, proizvesti
+# make (imenica) → (program „make“ (ne sklanjati)
+# makefile → makefile (ne prevoditi, ali možda sklanjati ili, budući da je  makefile datoteka, uvijek pisati ‘makefile’ datoteka)
+# archive member → pripadnik (arhive), a to je obično datoteka, direktorij..
+# C structure member → član
+# pattern → uzorak
+# prerequisite → preduvjet
+# child (process) → potomak, ptomački proces
+# parent (process) → predak, predački proces
+# reap child → počisti potomka
+# # recipe → recept
+# target → cilj
+# token → token (ne prevoditi)
+# pipe → cijev (možda je bolje „kanal“)
+# pipeline → cjevovod (možda je bolje „kanal“)
 # Hrvoje Niksic <hniksic@xemacs.org>, 2002.
 # Tomislav Krznar <tomislav.krznar@gmail.com>, 2012.
-#
+# Božidar Putanec <bozidarp@yahoo.com>, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: make 3.82\n"
+"Project-Id-Version: make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2012-10-31 17:32+0100\n"
-"Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-05-10 12:55-0700\n"
+"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
 "Language: hr\n"
 "MIME-Version: 1.0\n"
@@ -18,113 +37,121 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-Basepath: ../../Downloads/make-4.1.90\n"
+"X-Poedit-Bookmarks: 45,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
 
 #: ar.c:46
-#, fuzzy, c-format
+#, c-format
 msgid "attempt to use unsupported feature: '%s'"
-msgstr "pokušaj korištenja nepodržane mogućnosti: „%s”"
+msgstr "pokušaj upotrebe ne podržane značajke ‘%s’"
 
 #: ar.c:123
 msgid "touch archive member is not available on VMS"
-msgstr "touch elementa arhive nije dostupan na VMS-u"
+msgstr ""
+"U VMS sustavu nije moguće ‘touch’ (ažurirati vrijeme modifikacije i "
+"pristupa\n"
+"datoteci) pripadnika (member) arhive"
 
 #: ar.c:147
-#, fuzzy, c-format
+#, c-format
 msgid "touch: Archive '%s' does not exist"
-msgstr "touch: Arhiva „%s” ne postoji"
+msgstr "‘touch’: Arhiva ‘%s’ ne postoji"
 
 #: ar.c:150
-#, fuzzy, c-format
+#, c-format
 msgid "touch: '%s' is not a valid archive"
-msgstr "touch: „%s” nije ispravna arhiva"
+msgstr "‘touch’: ‘%s’ nije valjana arhiva"
 
 #: ar.c:157
-#, fuzzy, c-format
+#, c-format
 msgid "touch: Member '%s' does not exist in '%s'"
-msgstr "touch: Element „%s” ne postoji u „%s”"
+msgstr "‘touch’: Pripadnik arhive ‘%s’ ne postoji u arhivi ‘%s’"
 
 #: ar.c:164
-#, fuzzy, c-format
+#, c-format
 msgid "touch: Bad return code from ar_member_touch on '%s'"
-msgstr "touch: Neispravan povratni kod iz ar_member_touch na „%s”"
+msgstr "‘touch’: Loš povratni kȏd iz ‘ar_member_touch’ na ‘%s’"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
-msgstr "lbr$set_module() nije izdvojio informacije o modulu, status = %d"
+msgstr "lbr$set_module() neuspjelo izvući obavijesti o modulu, status = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
-msgstr "lbr$ini_control() nije uspio sa stanjem = %d"
+msgstr "lbr$ini_control() nije uspio sa statusom = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "ne mogu otvoriti biblioteku „%s” za traženje elementa „%s”"
+msgstr ""
+"nemoguće je otvoriti biblioteku ‘%s’ radi uvida u status pripadnika ‘%d’"
 
-#: arscan.c:944
-#, fuzzy, c-format
+#: arscan.c:965
+#, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
-msgstr "član „%s”%s: %ld bajtova na %ld (%ld).\n"
+msgstr "Pripadnik arhive ‘%s’%s: %ld bajtova na adresi %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
-msgstr " (ime je možda odsječeno)"
+msgstr " (ime je možda podrezano)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Datum %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, mod = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
-msgstr ""
+msgstr "Recept ima previše redova (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Prekid.\n"
 
-#: commands.c:629
-#, fuzzy, c-format
+#: commands.c:627
+#, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
-msgstr "*** [%s] Element arhive „%s” je možda lažan; nije izbrisan"
+msgstr "*** [%s] Pripadnik arhive ‘%s’ je možda lažan; nije izbrisan"
 
-#: commands.c:633
-#, fuzzy, c-format
+#: commands.c:631
+#, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
-msgstr "*** Element arhive „%s” je možda lažan; nije izbrisan"
+msgstr "*** Pripadnik arhive ‘%s’ je možda lažan; nije izbrisan"
 
-#: commands.c:647
-#, fuzzy, c-format
+#: commands.c:645
+#, c-format
 msgid "*** [%s] Deleting file '%s'"
-msgstr "*** [%s] BriÅ¡em datoteku â\80\9e%sâ\80\9d"
+msgstr "*** [%s] BriÅ¡em datoteku â\80\98%sâ\80\99"
 
-#: commands.c:649
-#, fuzzy, c-format
+#: commands.c:647
+#, c-format
 msgid "*** Deleting file '%s'"
-msgstr "*** BriÅ¡em datoteku â\80\9e%sâ\80\9d"
+msgstr "*** BriÅ¡em datoteku â\80\98%sâ\80\99"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
-msgstr "#  recept za izvršavanje"
+msgstr "#  recept koji treba primijeniti"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (ugrađeno):"
 
-#: commands.c:690
-#, fuzzy, c-format
+#: commands.c:688
+#, c-format
 msgid " (from '%s', line %lu):\n"
-msgstr " (iz â\80\9e%sâ\80\9d, redak %lu):\n"
+msgstr " (iz â\80\98%sâ\80\99, redak %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -132,222 +159,224 @@ msgstr ""
 "\n"
 "# Direktoriji\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
-msgstr "# %s: ne može se izvršiti stat.\n"
+msgstr "# %s: nemoguće ga je ‘stat’ (očitati mu status).\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
-msgstr "# %s (tipka %s, vrijeme uređivanja %d): ne može se otvoriti.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
+msgstr ""
+"# %s (ključ %s, vrijeme zadnje izmjene (mtime) %d): nije moguće otvoriti.\n"
 
-#: dir.c:1009
+# inode >  index in a table of contents or an inode in a Unix-like file system > ičvor
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
-msgstr "# %s (uređaj %d, indeksni čvor [%d,%d,%d]): ne može se otvoriti.\n"
+msgstr "# %s (uređaj %d, inode [%d,%d,%d]): nije moguće otvoriti.\n"
 
-#: dir.c:1014
+# An inode is a data structure on a filesystem on Linux and other Unix-like operating systems that stores all the information about a file except its name and its actual data.
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
-msgstr "# %s (uređaj %ld, indeksni čvor %ld): ne može se otvoriti.\n"
+msgstr "# %s (uređaj %ld, inode %ld): nije moguće otvoriti.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
-msgstr "# %s (tipka %s, vrijeme uređivanja %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
+msgstr "# %s (ključ %s, vrijeme zadnje izmjene (mtime) %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
-msgstr "# %s (uređaj %d, indeksni čvor [%d,%d,%d]): "
+msgstr "# %s (uređaj %d, inode [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
-msgstr "# %s (uređaj %ld, indeksni čvor %ld): "
+msgstr "# %s (uređaj %ld, inode %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
-msgstr "Nijedna"
+msgstr "Ne"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
-msgstr " datoteka, "
+msgstr " datoteke, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
-msgstr "nijedna"
+msgstr "ne"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
-msgstr " nemogućnost"
+msgstr " nemogućnosti"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " do sada."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " nemogućnosti u %lu direktorija.\n"
 
 #: expand.c:125
-#, fuzzy, c-format
+#, c-format
 msgid "Recursive variable '%s' references itself (eventually)"
-msgstr "Rekurzivna varijabla â\80\9e%sâ\80\9d pokazuje (na kraju) na sebe"
+msgstr "Rekurzivna varijabla â\80\98%sâ\80\99 ukazuje na samu sebe (u konaÄ\8dnici)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
-msgstr "nedovršena referenca na varijablu"
+msgstr "nedovršena referencija na varijablu"
 
-#: file.c:271
-#, fuzzy, c-format
+#: file.c:278
+#, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
-msgstr "Naveden je recept za datoteku „%s” na %s:%lu,"
+msgstr "Recept za datoteku ‘%s’ bio je naveden u %s:%lu,"
 
-#: file.c:276
-#, fuzzy, c-format
+#: file.c:283
+#, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
-msgstr "Recept za datoteku â\80\9e%sâ\80\9d naÄ\91en je implicitnim pretraživanjem propisa,"
+msgstr "Recept za datoteku â\80\98%sâ\80\99 bio je naÄ\91en pretragom po implicitnom pravilu,"
 
-#: file.c:280
-#, fuzzy, c-format
+#: file.c:287
+#, c-format
 msgid "but '%s' is now considered the same file as '%s'."
-msgstr "ali se „%s” sada smatra istom datotekom kao i „%s”."
+msgstr "ali ‘%s’ se sada smatra istom datotekom kao i ‘%s’."
 
-#: file.c:283
-#, fuzzy, c-format
+#: file.c:290
+#, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
-msgstr "Recept za â\80\9e%sâ\80\9d Ä\87e se zanemariti u korist onog za â\80\9e%sâ\80\9d."
+msgstr "Recept za â\80\98%sâ\80\99 Ä\87e se zanemariti u korist onog za â\80\98%sâ\80\99."
 
-#: file.c:303
-#, fuzzy, c-format
+#: file.c:310
+#, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
-msgstr "ne mogu preimenovati „%s” s jednim dvotočjem u „%s” s dva dvotočja"
+msgstr ""
+"‘%s’ s jednom dvotočkom ne može se preimenovati u ‘%s’ s dvije dvotočke"
 
-#: file.c:309
-#, fuzzy, c-format
+#: file.c:316
+#, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
-msgstr "ne mogu preimenovati „%s” s dva dvotočja u „%s” s jednim dvotočjem"
+msgstr ""
+"‘%s’ s dvije dvotočke ne može se preimenovati u ‘%s’ s jednom dvotočkom"
 
-#: file.c:401
-#, fuzzy, c-format
+#: file.c:408
+#, c-format
 msgid "*** Deleting intermediate file '%s'"
-msgstr "*** Brišem posrednu datoteku „%s”"
+msgstr "*** Brisanje prijelazne datoteke ‘%s’"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
-msgstr "Uklanjam posredne datoteke...\n"
+msgstr "Uklanjanje prijelaznih datoteka...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
-msgstr "Trenutno vrijeme"
+msgstr "Trenutno vrijeme"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
-msgstr "%s: Vremenska oznaka izvan granica; zamjenjujem s %s"
+msgstr "%s: Vremenska oznaka je izvan granica; zamjenjuje se s %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
-msgstr "# Nije meta:"
+msgstr "# Nije cilj (target):"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
-msgstr "#  Vrijedna datoteka (preduvjet mete .PRECIOUS)."
+msgstr "#  Vrijedna datoteka (preduvjet za .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
-msgstr "#  Lažna meta (preduvjet mete .PHONY)."
+msgstr "#  Lažni cilj (target) (preduvjet za .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
-msgstr "#  Meta naredbenog retka."
+msgstr "#  Cilj naredbenog retka."
 
-#: file.c:966
+# Zadan > standardni
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
-msgstr "#  Zadana, MAKEFILES ili -include/sinclude datoteka izrade."
+msgstr "#  Standardni MAKEFILES, ili ‘-include/sinclude’ makefile."
 
-#: file.c:968
-#, fuzzy
+#: file.c:975
 msgid "#  Builtin rule"
-msgstr ""
-"\n"
-"# Nema implicitnih propisa."
+msgstr "#  Ugrađeno pravilo"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
-msgstr "#   Implicitna pretraga propisa je izvršena."
+msgstr "#  Pretraživanje po implicitnom pravilu je izvršeno."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
-msgstr "#  Implicitna pretraga propisa nije izvršena."
+msgstr "#  Pretraživanje po implicitnom pravilu nije izvršeno."
 
-#: file.c:973
-#, fuzzy, c-format
+#: file.c:980
+#, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
-msgstr "#  Korijen implicitnog/statičkog uzorka: „%s”\n"
+msgstr "#  Korijen implicitnog ili statičkog uzorka: ‘%s’\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
-msgstr "#  Datoteka je posredni preduvjet."
+msgstr "#  Datoteka je prijelazni preduvjet."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Također napravi:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
-msgstr "#  Vrijeme promjene nikada nije provjereno."
+msgstr "#  Vrijeme zadnje izmjene nikad nije provjereno."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Datoteka ne postoji."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Datoteka je vrlo stara."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Zadnja promjena %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
-msgstr "#  Datoteka je ažurirana."
+msgstr "#  Datoteka je bila ažurirana."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
-msgstr "#  Datoteka nije ažurirana."
+msgstr "#  Datoteka nije bila ažurirana."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
-msgstr "#  Recept koji se trenutno izvršava (OVO JE BUG)."
+msgstr "#  Recept koji se trenutno izvršava (OVO JE BUG)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
-msgstr "#  Recept ovisnosti koji se izvršava (OVO JE BUG)."
+msgstr "#  Recept o ovisnostima koji se upravo izvršava (OVO JE BUG)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Uspješno ažuriran."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
-msgstr "#  Treba ga ažurirati (-q je postavljen)."
+msgstr "#  Ažuriranje je potrebno (opcija -q je dana)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
-msgstr "#  Nije ažuriran."
+msgstr "#  Ažuriranje nije uspjelo."
 
-#: file.c:1025
-#, fuzzy
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
-msgstr "#  Neispravna vrijednost u elementu „command_state”!"
+msgstr "#  Neispravna vrijednost u ‘command_state’ članu!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -355,153 +384,171 @@ msgstr ""
 "\n"
 "# Datoteke"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
 "# "
 msgstr ""
 "\n"
-"# statistike tablice raspršivanja datoteka:\n"
+"# status datoteka hash-tablice:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
-msgstr ""
+msgstr "%s: Polja ‘%s’ nema u međuspremniku (nije ‘cached’): %s"
 
-#: function.c:780
-#, fuzzy
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
-msgstr "prvi argument funkcije â\80\9ewordâ\80\9d nije broj"
+msgstr "prvi argument funkcije â\80\98wordâ\80\99 nije broj"
 
-#: function.c:785
-#, fuzzy
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
-msgstr "prvi argument funkcije â\80\9ewordâ\80\9d mora biti veći od 0"
+msgstr "prvi argument funkcije â\80\98wordâ\80\99 mora biti veći od 0"
 
-#: function.c:805
-#, fuzzy
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
-msgstr "drugi argument funkcije „wordlist” nije broj"
+msgstr "prvi argument funkcije ‘wordlist’ nije broj"
 
-#: function.c:807
-#, fuzzy
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
-msgstr "drugi argument funkcije â\80\9ewordlistâ\80\9d nije broj"
+msgstr "drugi argument funkcije â\80\98wordlistâ\80\99 nije broj"
 
-#: function.c:1499
-#, fuzzy, c-format
+#: function.c:1525
+#, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
-msgstr "windows32_openpipe(): DuplicateHandle(In) nije uspio (e=%ld)\n"
+msgstr ""
+"windows32_openpipe: DuplicateHandle(In) neuspješna, kȏd greške (e=%ld)\n"
 
-#: function.c:1523
-#, fuzzy, c-format
+#: function.c:1549
+#, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
-msgstr "windows32_open_pipe(): DuplicateHandle(Err) nije uspio (e=%ld)\n"
+msgstr ""
+"windows32_open_pipe: DuplicateHandle(Err) neuspješna, kȏd greške (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
-msgstr "CreatePipe() nije uspio (e=%ld)\n"
+msgstr "CreatePipe() neuspješna, neuspješna, kȏd greške (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
-msgstr "windows32_openpipe(): process_init_fd() nije uspio\n"
+msgstr "windows32_openpipe(): process_init_fd() neuspješna\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
-msgstr "Čistim privremenu skupnu datoteku %s.\n"
+msgstr "Čistim privremenu naredbenu (batch) datoteku %s.\n"
 
-#: function.c:2193
-#, fuzzy, c-format
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "datoteka: nedostaje naziv datoteke"
+
+#: function.c:2219 function.c:2250
+#, c-format
 msgid "open: %s: %s"
-msgstr "%s: %s"
+msgstr "open(): %s: %s"
 
-#: function.c:2203
-#, fuzzy, c-format
+#: function.c:2227
+#, c-format
 msgid "write: %s: %s"
-msgstr "greška pisanja: %s"
+msgstr "write(): %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr ""
+msgid "close: %s: %s"
+msgstr "close(): %s: %s"
 
-#: function.c:2324
-#, fuzzy, c-format
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "datoteka: previše argumenata"
+
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr "read(): %s: %s"
+
+#: function.c:2275
+#, c-format
+msgid "file: invalid file operation: %s"
+msgstr "datoteka: neispravna datotečna operacija: %s"
+
+#: function.c:2390
+#, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
-msgstr "nedovoljan broj argumenata (%d) funkciji „%s”"
+msgstr "nedovoljan broj argumenata (samo %d) za funkciju ‘%s’"
 
-#: function.c:2336
-#, fuzzy, c-format
+#: function.c:2402
+#, c-format
 msgid "unimplemented on this platform: function '%s'"
-msgstr "neimplementirano na ovoj platformi: funkcija „%s”"
+msgstr "nije implementirano na ovoj platformi: funkcija ‘%s’"
 
-#: function.c:2399
-#, fuzzy, c-format
+#: function.c:2466
+#, c-format
 msgid "unterminated call to function '%s': missing '%c'"
-msgstr "nedovršen poziv funkciji „%s”: nedostaje „%c”"
+msgstr "nedovršeni poziv funkciji ‘%s’: nedostaje ‘%c’"
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
-msgstr ""
+msgstr "Prazno ime funkcije"
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
-msgstr ""
+msgstr "Neispravan naziv funkcije: %s"
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
-msgstr ""
+msgstr "Naziv funkcije je predugačak: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "nedovoljan broj argumenata (%d) funkciji „%s”"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "Neispravan minimalni broj argumenata (%d) za funkciju %s"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "nedovoljan broj argumenata (%d) funkciji „%s”"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "Neispravan maksimalni broj argumenata (%d) za funkciju %s"
 
 #: getopt.c:659
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '%s' is ambiguous\n"
-msgstr "%s: opcija â\80\9e%sâ\80\9d je viÅ¡eznačna\n"
+msgstr "%s: opcija â\80\98%sâ\80\99 nije jednoznačna\n"
 
 #: getopt.c:683
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '--%s' doesn't allow an argument\n"
-msgstr "%s: opcija â\80\9e--%sâ\80\9d ne dozvoljava argument\n"
+msgstr "%s: opcija â\80\98--%sâ\80\99 ne dopuÅ¡ta argument\n"
 
 #: getopt.c:688
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '%c%s' doesn't allow an argument\n"
-msgstr "%s: opcija â\80\9e%c%sâ\80\9d ne dozvoljava argument\n"
+msgstr "%s: opcija â\80\98%c%sâ\80\99 ne dopuÅ¡ta argument\n"
 
 #: getopt.c:705 getopt.c:878
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '%s' requires an argument\n"
-msgstr "%s: opcija â\80\9e%sâ\80\9d zahtijeva argument\n"
+msgstr "%s: opcija â\80\98%sâ\80\99 zahtijeva argument\n"
 
 #: getopt.c:734
-#, fuzzy, c-format
+#, c-format
 msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: neprepoznata opcija „--%s”\n"
+msgstr "%s: nepoznata opcija ‘--%s’\n"
 
 #: getopt.c:738
-#, fuzzy, c-format
+#, c-format
 msgid "%s: unrecognized option '%c%s'\n"
-msgstr "%s: neprepoznata opcija „%c%s”\n"
+msgstr "%s: nepoznata opcija ‘%c%s’\n"
 
+# * 1003.2 specifies the format of this message.  */
+#            fprintf (stderr, _("%s: illegal option -- %c\n"),
 #: getopt.c:764
 #, c-format
 msgid "%s: illegal option -- %c\n"
-msgstr "%s: nedozvoljena opcija -- %c\n"
+msgstr "%s: ilegalna opcija -- %c\n"
 
 #: getopt.c:767
 #, c-format
@@ -514,30 +561,29 @@ msgid "%s: option requires an argument -- %c\n"
 msgstr "%s: opcija zahtijeva argument -- %c\n"
 
 #: getopt.c:844
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '-W %s' is ambiguous\n"
-msgstr "%s: opcija â\80\9e-W %sâ\80\9d je viÅ¡eznačna\n"
+msgstr "%s: opcija â\80\98-W %sâ\80\99 nije jednoznačna\n"
 
 #: getopt.c:862
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '-W %s' doesn't allow an argument\n"
-msgstr "%s: opcija â\80\9e-W %sâ\80\9d ne dozvoljava argument\n"
+msgstr "%s: opcija â\80\98-W %sâ\80\99 ne dopuÅ¡ta argument\n"
 
 #: guile.c:58
 #, c-format
 msgid "guile: Expanding '%s'\n"
-msgstr ""
+msgstr "‘guile’: Proširuje se '%s'\n"
 
 #: guile.c:74
 #, c-format
 msgid "guile: Evaluating '%s'\n"
-msgstr ""
+msgstr "‘guile’: Ocjenjuje se '%s'\n"
 
 #: hash.c:49
 #, c-format
 msgid "can't allocate %lu bytes for hash table: memory exhausted"
-msgstr ""
-"ne mogu alocirati %lu bajtova za tablicu raspršivanja: memorija iscrpljena"
+msgstr "ne mogu dodijeliti %lu bajtova za hash-tablicu: nema dovoljno memorije"
 
 #: hash.c:280
 #, c-format
@@ -547,340 +593,319 @@ msgstr "Opterećenje=%ld/%ld=%.0f%%, "
 #: hash.c:282
 #, c-format
 msgid "Rehash=%d, "
-msgstr "Preraspodjela=%d, "
+msgstr "(Preraditi) Rehash=%d, "
 
+# možda bi bolje bilo > Kontradikcije
 #: hash.c:283
 #, c-format
 msgid "Collisions=%ld/%ld=%.0f%%"
 msgstr "Sudari=%ld/%ld=%.0f%%"
 
 #: implicit.c:38
-#, fuzzy, c-format
+#, c-format
 msgid "Looking for an implicit rule for '%s'.\n"
-msgstr "Tražim implicitni propis za „%s”.\n"
+msgstr "Potraga za implicitnim pravilom za ‘%s’.\n"
 
 #: implicit.c:54
-#, fuzzy, c-format
+#, c-format
 msgid "Looking for archive-member implicit rule for '%s'.\n"
-msgstr "Tražim implicitni propis za „%s” koji pripada elementu arhive.\n"
+msgstr "Traži se implicitno pravilo za pripadnika arhive za ‘%s’\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
-msgstr "Izbjegavam rekurziju implicitnog propisa.\n"
+msgstr "Izbjegavanje rekurzije implicitnog pravila.\n"
 
 #: implicit.c:486
 #, c-format
 msgid "Stem too long: '%.*s'.\n"
-msgstr ""
+msgstr "Korijen je predugačak: ‘%.*s’.\n"
 
 #: implicit.c:491
-#, fuzzy, c-format
+#, c-format
 msgid "Trying pattern rule with stem '%.*s'.\n"
-msgstr "Pokušavam propis uzorka s korijenom „%.*s”.\n"
+msgstr "Pokušaj primijene pravila s korijenom ‘%.*s’.\n"
 
 #: implicit.c:697
-#, fuzzy, c-format
+#, c-format
 msgid "Rejecting impossible rule prerequisite '%s'.\n"
-msgstr "Odbacujem nemoguće pravilo preduvjeta „%s”.\n"
+msgstr "Odbacivanje nemogućeg preduvjeta pravila ‘%s’.\n"
 
 #: implicit.c:698
-#, fuzzy, c-format
+#, c-format
 msgid "Rejecting impossible implicit prerequisite '%s'.\n"
-msgstr "Odbacujem nemoguć implicitni preduvjet „%s”.\n"
+msgstr "Odbacivanje nemogućeg implicitnog preduvjeta ‘%s’.\n"
 
 #: implicit.c:711
-#, fuzzy, c-format
+#, c-format
 msgid "Trying rule prerequisite '%s'.\n"
-msgstr "Pokušavam s propisom preduvjeta „%s”.\n"
+msgstr "Pokušaj primjene pravila preduvjeta ‘%s’.\n"
 
 #: implicit.c:712
-#, fuzzy, c-format
+#, c-format
 msgid "Trying implicit prerequisite '%s'.\n"
-msgstr "Pokušavam s implicitnim preduvjetom „%s”.\n"
+msgstr "Pokušaj primjene implicitnog preduvjeta ‘%s’.\n"
 
 #: implicit.c:751
-#, fuzzy, c-format
+#, c-format
 msgid "Found prerequisite '%s' as VPATH '%s'\n"
-msgstr "Našao preduvjet „%s” kao VPATH „%s”\n"
+msgstr "Nađen preduvjet ‘%s’ kao VPATH ‘%s’\n"
 
 #: implicit.c:765
-#, fuzzy, c-format
+#, c-format
 msgid "Looking for a rule with intermediate file '%s'.\n"
-msgstr "Tražim propis s posrednom datotekom „%s”.\n"
+msgstr "Potraga za pravilom s prijelaznom datotekom ‘%s’.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
-msgstr "Ne mogu napraviti privremenu datoteku\n"
+msgstr "Nemoguće je napraviti privremenu datoteku\n"
 
-#: job.c:483
+# A core dump is a file of a computer's documented memory of when a program or computer crashed.
+#: job.c:485
 msgid " (core dumped)"
-msgstr " (jezgra izbačena)"
+msgstr " (napravljen ispis memorije)"
 
-#: job.c:488
-#, fuzzy
+#: job.c:490
 msgid " (ignored)"
-msgstr "[%s] Greška %d (zanemarena)"
+msgstr " (zanemareno)"
 
-#: job.c:492 job.c:2046
-#, fuzzy
+#: job.c:494 job.c:1828
 msgid "<builtin>"
-msgstr " (ugrađeno):"
-
-#: job.c:503
-#, fuzzy, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "upozorenje: poništavam recept za metu „%s”"
-
-#: job.c:516 job.c:524
-#, fuzzy, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "*** [%s] Greška %d"
-
-#: job.c:519
-#, fuzzy, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "*** [%s] Greška 0x%x"
+msgstr "<ugrađeno>"
 
-#: job.c:529
-#, fuzzy, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s%s: %s"
+#: job.c:510
+#, c-format
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] Greška %d%s"
 
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
-msgstr "*** Čekam nedovršene poslove...."
+msgstr "*** Čekanje na završetak nedovršenih poslova...."
 
-#: job.c:651
+# child > dijete > potomak; pridjev potamački
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
-msgstr "Živo dijete %p (%s) PID %s %s\n"
+msgstr "Aktivni potomački proces %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (udaljen)"
 
-#: job.c:841
+# reap (in cs) > To terminate a child process that has previously exited, thereby removing it from the process table
+#     Until a child process is reaped, it may be listed in the process table as a zombie or defunct process.
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
-msgstr "Skupljam neuspješno dijete %p PID %s %s\n"
+msgstr "Počišćen je neuspješno završeni potomački proces %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
-msgstr "Skupljam uspješno dijete %p PID %s %s\n"
+msgstr "Počišćen je uspješno završeni potomački proces %p PID %s %s\n"
 
-#: job.c:849
+# batch file > naredbena datoteka sustava (skript datoteka)
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
-msgstr "Čistim privremenu skupnu datoteku %s\n"
+msgstr "Čistim privremenu naredbenu (batch) datoteku %s\n"
 
-#: job.c:855
-#, fuzzy, c-format
+#: job.c:845
+#, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
-msgstr "Čistim privremenu skupnu datoteku %s\n"
+msgstr ""
+"Čišćenje privremene naredbene (batch) datoteke %s nije uspjelo, greška (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
-msgstr "Uklanjam dijete %p PID %s%s iz lanca.\n"
+msgstr "Potomak %p PID %s%s uklonjen je iz lanca.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
-msgstr "Ispušten simbol za dijete %p (%s).\n"
+msgstr "Oslobođen je token za potomka %p (%s).\n"
 
-# Što bi ovdje trebalo ići?
-#: job.c:1036
-msgid "write jobserver"
-msgstr "poslužitelj poslova pisanja"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() nije uspio pokrenuti proces (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
 "Counted %d args in failed launch\n"
 msgstr ""
 "\n"
-"Izbrojeno %d argumenata u neuspjelom pokretanju\n"
+"Prilikom neuspjelog starta izbrojeno je %d argumenata\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
-msgstr "Smještam dijete %p (%s) PID %s%s u lanac.\n"
-
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
+msgstr "Dodavanje potomka %p (%s) PID %s%s u lanac potomaka.\n"
 
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
-msgstr "Preuzet simbol za dijete %p (%s).\n"
-
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "cjevovod poslova čitanja"
+msgstr "Dobiven token za potomka %p (%s).\n"
 
-#: job.c:2056
-#, fuzzy, c-format
+#: job.c:1838
+#, c-format
 msgid "%s: target '%s' does not exist"
-msgstr "touch: Arhiva „%s” ne postoji"
+msgstr "%s: cilj '%s' ne postoji"
 
-#: job.c:2059
-#, fuzzy, c-format
+#: job.c:1841
+#, c-format
 msgid "%s: update target '%s' due to: %s"
-msgstr "%sNema propisa za izradu mete „%s”, koji traži „%s”%s"
+msgstr "%s: ažuriraj cilj '%s' zbog: %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
-msgstr ""
-"ne mogu silom primijeniti ograničenje opterećenja na ovom operacijskom "
-"sustavu"
+msgstr "ovaj operativni sustav ne dopušta ograničenje opterećenja"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
-msgstr "ne mogu silom primijeniti ograničenje opterećenja: "
+msgstr "nemoguće je ograničiti opterećenje: "
 
-#: job.c:2252
+# In Unix and related computer operating systems, a file descriptor is an abstract indicator (handle) used to access a file
+# stdin > standardni ulaz
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
-"nema više upravljača datotekama: ne mogu udvostručiti standardni ulaz\n"
+"nema više datotečnih deskriptora: ‘stdin’ (standardni ulaz)\n"
+"ne može se duplicirati\n"
 
-#: job.c:2264
+# stdout > standardni izlaz
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
-"nema više upravljača datotekama: ne mogu udvostručiti standardni izlaz\n"
+"nema više datotečnih deskriptora: ‘stdout’ (standardni izlaz)\n"
+"se ne može kopirati\n"
 
-#: job.c:2278
-#, fuzzy
+# stderr > standard error
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
-"nema više upravljača datotekama: ne mogu udvostručiti standardni ulaz\n"
+"nema više datotečnih deskriptora: ‘stderr’ (standardna greška)\n"
+"se ne može kopirati\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
-msgstr "Ne mogu obnoviti standardni ulaz\n"
+msgstr "‘stdin’ (stadardni ulaz) se ne može obnoviti\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
-msgstr "Ne mogu obnoviti standardni izlaz\n"
+msgstr "standardni izlaz ‘stdout’ se ne može obnoviti\n"
 
-#: job.c:2309
-#, fuzzy
+#: job.c:2105
 msgid "Could not restore stderr\n"
-msgstr "Ne mogu obnoviti standardni ulaz\n"
+msgstr "‘stderr’ (standardna greška) se ne može obnoviti\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
-msgstr "make je skupio dijete pid %s, još uvijek čeka pid %s\n"
+msgstr ""
+"‘make’ je počistio potomački proces pid %s, ali još uvijek čeka na pid %s\n"
+
+#: job.c:2275
+#, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: Naredba nije pronađena\n"
 
-#: job.c:2458
+#: job.c:2277
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: Naredba nije pronađena"
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: Naredba nije pronađena\n"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
-msgstr "%s: Program ljuske nije pronađen"
+msgstr "%s: Ljuskin (shell) program nije pronađen"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
-msgstr "spawnvpe: prostor okoline je možda iscrpljen"
+msgstr "‘spawnvpe’: u programskom okružju možda nema dovoljno mjesta"
 
-#: job.c:2765
-#, fuzzy, c-format
+#: job.c:2584
+#, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
-msgstr "$SHELL se promijenio (prije „%s”, sada „%s”)\n"
+msgstr "Varijabla $SHELL se promijenila (prije ‘%s’, sada ‘%s’)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
-msgstr "Stvaram privremenu skupnu datoteku %s\n"
+msgstr "Stvaram privremenu naredbenu (batch) datoteku %s\n"
 
-#: job.c:3206
-#, fuzzy
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
 msgstr ""
-"Sadržaj skupne datoteke:%s\n"
-"\t%s\n"
+"Sadržaj naredbene (batch) datoteke:\n"
+"\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
 "\t%s\n"
 msgstr ""
-"Sadržaj skupne datoteke:%s\n"
+"Sadržaj naredbene (batch) datoteke:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
-"%s (redak %d) Neispravan kontekst ljuske (!unixy && !batch_mode_shell)\n"
+"%s (redak %d) Loš ljuskin (shell) kontekst (!unixy && !batch_mode_shell)\n"
 
 #: job.h:43
 msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build."
-msgstr ""
+msgstr "Opcija -O[TYPE] (--output-sync[=TYPE]) nije ugrađena u ovaj program."
 
 #: load.c:60
 #, c-format
 msgid "Failed to open global symbol table: %s"
-msgstr ""
+msgstr "Otvaranje globalne tablice simbola nije uspjelo: %s"
 
 #: load.c:97
 #, c-format
 msgid "Loaded object %s is not declared to be GPL compatible"
-msgstr ""
+msgstr "Učitani objekt %s nema deklaraciju da je kompatibilan s GPL-om"
 
 #: load.c:104
 #, c-format
 msgid "Failed to load symbol %s from %s: %s"
-msgstr ""
+msgstr "Učitavanje simbola %s nije uspjelo iz %s: %s"
 
 #: load.c:149
 #, c-format
 msgid "Empty symbol name for load: %s"
-msgstr ""
+msgstr "Ime simbola kojeg treba učitati je prazno: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
-msgstr ""
+msgstr "Učitavanje simbola %s iz %s\n"
 
-#: load.c:244
-#, fuzzy
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
-msgstr "Paralelni poslovi (-j) nisu podržani na ovoj platformi."
+msgstr "Operacija ‘load’ nije podržana na ovoj platformi."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Opcije:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
-msgstr "  -b, -m                      Zanemareno zbog kompatibilnosti.\n"
+msgstr "  -b, -m                      Zanemarena zbog kompatibilnosti.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
-msgstr "  -B, --always-make           Bezuvjetno izradi sve mete.\n"
+msgstr ""
+"  -B, --always-make           Bezuvjetno izradi sve ciljeve (targets).\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -888,215 +913,221 @@ msgstr ""
 "  -C DIREKTORIJ, --directory=DIREKTORIJ\n"
 "                              Prijeđi u DIREKTORIJ prije početka rada.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          Ispiši puno podataka za debugiranje.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=ZASTAVICE]         Ispiši razne vrste informacija za "
 "debugiranje.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
 msgstr ""
 "  -e, --environment-overrides\n"
-"                              Varijable okoline imaju veću važnost od\n"
-"                              datoteka izrade.\n"
+"                              Varijable okružja imaju prednost\n"
+"                                (nadjačavaju ih) nad varijablama\n"
+"                                 iz ‘makefile’ datoteka\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
-"  --eval=NIZ                  Postupaj s NIZOM kao naredbom datoteke "
-"izrade.\n"
+"  --eval=NIZ                  NIZ tretiraj kao da je direktiva\n"
+"                               ‘makefile’ datoteke.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
 msgstr ""
 "  -f DATOTEKA, --file=DATOTEKA, --makefile=DATOTEKA\n"
-"                              Pročitaj DATOTEKU kao datoteku izrade.\n"
+"                              Učitaj DATOTEKU kao ‘makefile’ datoteku.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
-msgstr "  -h, --help                  Ispiši ovu poruku i izađi.\n"
+msgstr "  -h, --help                  prikaži ovu pomoć i iziđi.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
-msgstr "  -i, --ignore-errors         Zanemari greške iz recepata.\n"
+msgstr "  -i, --ignore-errors         Zanemari greške u receptima.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
 msgstr ""
 "  -I DIREKTORIJ, --include-dir=DIREKTORIJ\n"
-"                              Traži u DIREKTORIJU uključene datoteke "
-"izrade.\n"
+"                              Traži uključene ‘makefiles’ u DIREKTORIJU.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
 msgstr ""
-"  -j [N], --jobs[=N]          Dozvoli N istovremenih poslova; bez argumenta\n"
-"                              ih dozvoli beskonačno.\n"
+"  -j [N], --jobs[=N]          Dopusti N istovremenih poslova; bez argumenta\n"
+"                                nema ograničenja.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
-"  -k, --keep-going            Nastavi s radom ako se neke mete ne mogu "
-"izraditi.\n"
+"  -k, --keep-going            Nastavi s radom iako se neki ciljevi "
+"(targets)\n"
+"                                ne mogu izraditi.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
 "N.\n"
 msgstr ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
-"                              Ne pokreći višestruke poslove, osim ako je\n"
-"                              opterećenje ispod N.\n"
+"                              Ne pokreći više poslova istovremeno, osim ako\n"
+"                                je opterećenje ispod N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
 msgstr ""
-"  -L, --check-symlink-times   Koristi posljednji mtime između simboličkih "
-"veza i mete.\n"
+"  -L, --check-symlink-times   Rabi najnovije vrijeme izmjene ‘mtime’ između\n"
+"                                simboličkih poveznica i cilja (target)\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
 "them.\n"
 msgstr ""
 "  -n, --just-print, --dry-run, --recon\n"
-"                              Nemoj zapravo pokrenuti nijedan recept,\n"
-"                              samo ih ispiši.\n"
+"                              Ne izrađuj nijedan recept, samo ih ispiši.\n"
 
-#: main.c:352
+# remake > make (something) again or differently.
+# remake > gl. prepraviti, preurediti / im. prepravak, prerada
+# na nov način, drugačije urediti, izmijeniti da na drugi način služi svrsi; preuređenje, preuređen.
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
 "it.\n"
 msgstr ""
 "  -o DATOTEKA, --old-file=DATOTEKA, --assume-old=DATOTEKA\n"
-"                              Smatraj da je DATOTEKA vrlo stara i nemoj ju\n"
-"                              ponovo napraviti.\n"
+"                              Ne prerađuj DATOTEKU, jer je vrlo stara.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
+"  -O[TYPE], --output-sync[=TYPE]\n"
+"                              Sinkroniziraj izlaz paralelnih poslova po "
+"TYPE.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
-msgstr "  -p, --print-data-base       IspiÅ¡i â\80\9emakeâ\80\9d internu bazu podataka.\n"
+msgstr "  -p, --print-data-base       IspiÅ¡i â\80\98makeâ\80\99 internu bazu podataka.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
 msgstr ""
-"  -q, --question              Ne pokreći recepte; izlazno stanje označava\n"
-"                              je li sve ažurirano.\n"
+"  -q, --question              Ne izrađuj recepte; status izlaza pokazuje\n"
+"                                ako je sve ažurirano.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
-msgstr "  -r, --no-builtin-rules      Onemogući ugrađene implicitne propise.\n"
+msgstr "  -r, --no-builtin-rules      Onemogući ugrađena implicitna pravila.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables  Onemogući ugrađene vrijednosti varijabli.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Ne ispisuj recepte.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
 msgstr ""
 "  -S, --no-keep-going, --stop\n"
-"                              Isključuje -k.\n"
+"                              Isključi -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
-"  -t, --touch                 Umjesto ponovne izrade dodirni izgrađene "
-"mete.\n"
+"  -t, --touch                 Umjesto prerade ciljeva (targets) samo ih "
+"takni\n"
+"                                (‘touch’: označi ih kao da su "
+"aktualizirani)\n"
 
-#: main.c:373
-#, fuzzy
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  -d                          Ispiši puno podataka za debugiranje.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
-msgstr "  -v, --version               Ispiši „make” broj inačice i izađi.\n"
+msgstr ""
+"  -v, --version               Ispiši obavijesti o ‘make’ inačici i iziđi.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
-msgstr "  -w, --print-directory       Ispiši trenutni direktorij.\n"
+msgstr "  -w, --print-directory       Ispiši trenutni direktorij.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
 msgstr ""
-"  --no-print-directory        Isključi -w, čak i ako je implicitno "
-"uključen.\n"
+"  --no-print-directory        Isključi -w, premda je implicitno uključen.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
 msgstr ""
-"  -W DATOTEKA, --what-if=DATOTEKA, --new-file=DATOTEKA,\n"
-"  --assume-new=DATOTEKA\n"
-"                              Smatraj DATOTEKU beskonačno novom.\n"
+"  -W DATOTEKA, --what-if=DATOTEKA, --new-file=DATOTEKA, --assume-"
+"new=DATOTEKA\n"
+"                              Smatraj da je DATOTEKA uvijek nova.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
 msgstr ""
-"  --warn-undefined-variables  Upozori pri referenciranju nedefinirane "
-"varijable.\n"
+"  --warn-undefined-variables  Upozori ako se spomene nedefinirana "
+"varijabla.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "prazan niz nije ispravan naziv datoteke"
 
-#: main.c:737
-#, fuzzy, c-format
+#: main.c:766
+#, c-format
 msgid "unknown debug level specification '%s'"
-msgstr "nepoznata oznaka razine debugiranja „%s”"
+msgstr "nepoznata specifikacija ‘%s’ razine debugiranja"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
-msgstr ""
+msgstr "nepoznata vrsta ‘%s’ ‘output-sync’"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
-msgstr "%s: Uhvaćen prekid/iznimka (kod = 0x%lx, adr = 0x%p)\n"
+msgstr "%s: Uhvaćen prekid ili iznimka (kȏd  = 0x%lx, adresa = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1106,230 +1137,189 @@ msgid ""
 "ExceptionAddress = 0x%p\n"
 msgstr ""
 "\n"
-"Filtar nekontrolirane iznimke pozvan iz programa %s\n"
+"Filtar neobrađene iznimke pozvan je iz programa %s\n"
 "ExceptionCode = %lx\n"
 "ExceptionFlags = %lx\n"
 "ExceptionAddress = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
-msgstr "Pristupni prekršaj: operacija pisanja na adresi 0x%p\n"
+msgstr "Pristupni prekršaj: pokušaj pisanja na adresi 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
-msgstr "Pristupni prekršaj: operacija čitanja na adresi 0x%p\n"
+msgstr "Pristupni prekršaj: pokušaj čitanja na adresi 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() postavlja default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
-msgstr "find_and_set_shell() pretraga putanje postavlja default_shell = %s\n"
+msgstr "find_and_set_shell() pretragom putanje postavlja default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
-msgstr "%s se zaustavlja na 30 sekundi..."
+msgstr "%s zaustavljen na 30 sekundi..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
-msgstr "gotov sa sleep(30).  Nastavljam.\n"
+msgstr "završeno je 30 sekunda spavanja. Nastavlja se.\n"
 
-#: main.c:1527
-#, c-format
+# parent > roditelj > predak; pridjev predački
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
+"upozorenje: poslužitelj poslova je nedostupan: koristi se -j1.\n"
+"Dodajte ‘+’ predačkom (parent) ‘make’ pravilu."
 
-#: main.c:1530
-#, fuzzy, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Klijent poslužitelja poslova (fds %d,%d)\n"
-
-#: main.c:1534
-#, fuzzy, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "interna greška: neispravan --jobserver-fds niz „%s”"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Klijent poslužitelja poslova (fds %d,%d)\n"
-
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
-"upozorenje: pod-make prisilno postavlja -jN: onemogućujem poslužitelj "
-"poslova."
-
-# Treba li ovo prevesti?
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "dup poslužitelj poslova"
-
-#: main.c:1570
-#, fuzzy
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-"upozorenje: poslužitelj poslova nedostupan: koristim -j1.  Dodaj `+' na "
-"roditeljev propis izrade."
+"upozorenje: -jN je prinudno zadan u ‘submake’:\n"
+"način rada poslužitelja poslova je onemogućen."
 
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
-msgstr "Datoteka izrade sa standardnog ulaza navedena dvaput."
+msgstr "‘Makefile’ je dva puta naveden na standardnom ulazu."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (privremena datoteka)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (privremena datoteka)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Paralelni poslovi (-j) nisu podržani na ovoj platformi."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
-msgstr "Vraćam način rada s jednim poslom (-j1)."
-
-#: main.c:1994
-#, fuzzy, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Klijent poslužitelja poslova (fds %d,%d)\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "stvaram cjevovod poslova"
+msgstr "Povratak na način rada s jednim poslom (-j1)."
 
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "inicijaliziraj cjevovod poslužitelja poslova"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
-msgstr "Simboličke veze nisu podržane: onemogućujem -L."
+msgstr "Simboličke poveznice nisu podržane: onemogućuje se -L."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
-msgstr "Ažuriram datoteke izrade....\n"
+msgstr "Ažuriram ‘makefiles’....\n"
 
-#: main.c:2158
-#, fuzzy, c-format
+#: main.c:2195
+#, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
-msgstr "Datoteka izrade „%s” bi mogla ući u petlju; ne izgrađujem ponovo.\n"
+msgstr "‘Makefile’ ‘%s’ bi mogao ući u petlju; neće se prerađivati.\n"
 
-#: main.c:2237
-#, fuzzy, c-format
+#: main.c:2283
+#, c-format
 msgid "Failed to remake makefile '%s'."
-msgstr "Nisam uspio ponovo izgraditi datoteku izrade „%s”."
+msgstr "Neuspjeh prerade datoteke ‘makefile’ ‘%s’."
 
-#: main.c:2257
-#, fuzzy, c-format
+#: main.c:2303
+#, c-format
 msgid "Included makefile '%s' was not found."
-msgstr "Uključeni datoteka izrade „%s” nije pronađena."
+msgstr "Uključena datoteka ‘makefile’ ‘%s’ nije pronađena."
 
-#: main.c:2262
-#, fuzzy, c-format
+#: main.c:2308
+#, c-format
 msgid "Makefile '%s' was not found"
-msgstr "Datoteka izrade „%s” nije pronađena"
+msgstr "Datoteka ‘makefile’ ‘%s’ nije pronađena"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
-msgstr "Ne mogu se vratiti u izvorni direktorij."
+msgstr "Ne mogu se vratiti u početni direktorij."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
-msgstr "Ponovo izvršavam[%u]:"
+msgstr "Ponovno izvršavanje[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (privremena datoteka): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
-msgstr ".DEFAULT_GOAL sadrži više od jedne mete"
+msgstr ".DEFAULT_GOAL sadrži više od jednog cilja"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
-msgstr "Nijedna meta nije navedena, niti je pronađena ijedna datoteka izrade"
+msgstr "Nijedan cilj nije naveden i nijedna ‘makefile’ datoteka nije pronađena"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
-msgstr "Nema meta"
+msgstr "Nema ciljeva"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
-msgstr "Ažuriram ciljne mete....\n"
+msgstr "Ciljevi (targets) za željeni rezultat (goal) se ažuriraju ....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
-"upozorenje: Uočena je nepravilnost sata.  Izgradnja bi mogla biti nedovršena."
+"upozorenje: Otkriven je problem sa satom. Izrada možda nije kompletno "
+"dovršena."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
-msgstr "Uporaba: %s [opcije] [meta] ...\n"
+msgstr "Uporaba: %s [opcije] [cilj] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
 "This program built for %s\n"
 msgstr ""
 "\n"
-"Program izgrađen za %s\n"
+"Ovaj program je napravljen za %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
 "This program built for %s (%s)\n"
 msgstr ""
 "\n"
-"Program izgrađen za %s (%s)\n"
+"Ovaj program je napravljen za %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
-msgstr "Prijavite greške na <bug-make@gnu.org>\n"
+msgstr ""
+"Greške (bugs) na engleskom javite na <bug-make@gnu.org>\n"
+"Pogreške u prijevodu i vaše prijedloge javite na <lokalizacija@linux.hr>\n"
 
-#: main.c:2807
-#, fuzzy, c-format
+#: main.c:2869
+#, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
-msgstr "opcija â\80\9e%s%sâ\80\9d zahtijeva neprazan znakovni niz kao argument"
+msgstr "opcija â\80\98%s%sâ\80\99 zahtijeva kao argument niz koji nije prazan"
 
-#: main.c:2871
-#, fuzzy, c-format
+#: main.c:2933
+#, c-format
 msgid "the '-%c' option requires a positive integer argument"
-msgstr "opcija â\80\9e-%câ\80\9d zahtijeva pozitivan cjelobrojni argument"
+msgstr "opcija â\80\98-%câ\80\99 zahtijeva za argument pozitivan prirodni broj"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
-msgstr "%sIzgrađen za %s\n"
+msgstr "%sNapravljen za %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
-msgstr "%sIzgrađen za %s (%s)\n"
+msgstr "%sNapravljen za %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1337,104 +1327,105 @@ msgid ""
 "%sThis is free software: you are free to change and redistribute it.\n"
 "%sThere is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
-"%sLicenca GPLv3+: GNU GPL inačica 3 ili kasnija <http://gnu.org/licenses/gpl."
-"html>\n"
-"%sOvo je slobodan softver: slobodno ga smijete mijenjati i dijeliti.\n"
-"%sNEMA JAMSTAVA, do krajnje mjere dozvoljene zakonom.\n"
+"%sLicencija GPLv3+: GNU GPL inačica 3 ili kasnija\n"
+"  <http://gnu.org/licenses/gpl.html>\n"
+"%sOvo je slobodan softver: slobodno ga mijenjajte i dijelite.\n"
+"%sNEMA JAMSTVA, do granica dopuštenih zakonom.\n"
+"Pogreške u prijevodu i vaše prijedloge javite na <lokalizacija@linux.hr>\n"
+"\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
 "# Make data base, printed on %s"
 msgstr ""
 "\n"
-"# Make baza podataka, ispisana na %s"
+"# ‘Make’ baza podataka, ispisana na %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
 "# Finished Make data base on %s\n"
 msgstr ""
 "\n"
-"# Kraj Make baze podataka na %s\n"
+"# ‘Make’ baza podataka zgotovljena na %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Nepoznata greška %d"
 
 # Da prevedem ovo?
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
-msgstr "%s: korisnik %lu (stvarno %lu), grupa %lu (stvarno %lu)\n"
+msgstr "%s: korisnik %lu (zapravo %lu), grupa %lu (zapravo %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Inicijaliziran pristup"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Korisnički pristup"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
-msgstr "Make pristup"
+msgstr "‘Make’ pristup"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
-msgstr "Pristup djeteta"
+msgstr "Potomački proces"
 
 #: output.c:104
 #, c-format
 msgid "%s: Entering an unknown directory\n"
-msgstr "%s: Ulazim u nepoznat direktorij\n"
+msgstr "%s: Ulazak u nepoznat direktorij\n"
 
 #: output.c:106
 #, c-format
 msgid "%s: Leaving an unknown directory\n"
-msgstr "%s: Izlazim iz nepoznatog direktorija\n"
+msgstr "%s: Izlazak iz nepoznatog direktorija\n"
 
 #: output.c:109
-#, fuzzy, c-format
+#, c-format
 msgid "%s: Entering directory '%s'\n"
-msgstr "%s: Ulazim u direktorij „%s”\n"
+msgstr "%s: Ulazak u direktorij ‘%s’\n"
 
 #: output.c:111
-#, fuzzy, c-format
+#, c-format
 msgid "%s: Leaving directory '%s'\n"
-msgstr "%s: Izlazim iz direktorija „%s”\n"
+msgstr "%s: Izlazak iz direktorija ‘%s’\n"
 
 #: output.c:115
 #, c-format
 msgid "%s[%u]: Entering an unknown directory\n"
-msgstr "%s[%u]: Ulazim u nepoznat direktorij\n"
+msgstr "%s[%u]: Ulazak u nepoznat direktorij\n"
 
 #: output.c:117
 #, c-format
 msgid "%s[%u]: Leaving an unknown directory\n"
-msgstr "%s[%u]: Izlazim iz nepoznatog direktorija\n"
+msgstr "%s[%u]: Izlazak iz nepoznatog direktorija\n"
 
 #: output.c:120
-#, fuzzy, c-format
+#, c-format
 msgid "%s[%u]: Entering directory '%s'\n"
-msgstr "%s[%u]: Ulazim u direktorij „%s”\n"
+msgstr "%s[%u]: Ulazak u direktorij ‘%s’\n"
 
 #: output.c:122
-#, fuzzy, c-format
+#, c-format
 msgid "%s[%u]: Leaving directory '%s'\n"
-msgstr "%s[%u]: Izlazim iz direktorija „%s”\n"
+msgstr "%s[%u]: Izlazak iz direktorija ‘%s’\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "greška pisanja: %s"
+msgstr "greška pisanja: stdout (standardni izlaz)"
 
 #: output.c:677
 msgid ".  Stop.\n"
-msgstr ".  Zaustavi.\n"
+msgstr ".  Svršetak.\n"
 
 #: output.c:711
 #, c-format
@@ -1446,669 +1437,725 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+# In computer science, an anonymous pipe is a simplex FIFO communication channel that may be used for one-way interprocess communication (IPC). An implementation is often integrated into the operating system's file IO subsystem.
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "kreiranje cijevi za poslove (jobs pipe)"
+
+# http://make.mad-scientist.net/papers/jobserver-implementation/
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "dupliciranje cijevi za poslove (jobs pipe)"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "inicijalizacija cijevi poslužitelja poslova (jobserver pipe)"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "interna greška: neispravan niz ‘%s’ za --jobserver-auth"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Klijent poslužitelja poslova (fds %d,%d)\n"
+
+# In computing, a pipeline is a set of data processing elements connected in series, where the output of one element is the input of the next one.
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "cjevovod (pipeline) poslužitelja poslova"
+
+# Što bi ovdje trebalo ići?
+# bp: iz izvornog koda, možda ovo.
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "zapis poslužitelja poslova"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "‘pselect’ cijevi poslova (jobs pipe)"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "čitanje poslova s cijevi (jobs pipe)"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
-msgstr "Čitam datoteke izrade...\n"
+msgstr "Čitanje ‘makefiles’ datoteka...\n"
 
-#: read.c:335
-#, fuzzy, c-format
+#: read.c:329
+#, c-format
 msgid "Reading makefile '%s'"
-msgstr "Čitam datoteku izrade „%s”"
+msgstr "Čitanje ‘makefile’ datoteke ‘%s’"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
-msgstr " (nema zadane mete)"
+msgstr " (nema standardnog cilja)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (putanja pretraživanja)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (nije važno)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
-msgstr " (bez proširenja ~)"
+msgstr " (bez proširivanja znaka ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
-msgstr ""
+msgstr "UTF-8 BOM u ‘makefile’ datoteci '%s' se preskače\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
-msgstr ""
+msgstr "UTF-8 BOM u ‘makefile’ međumemoriji se preskače\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
-msgstr "neispravna sintaksa uvjeta"
+msgstr "neispravna sintaksa u uvjetu"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
-msgstr ""
+msgstr "%s: učitavanje nije uspjelo"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
-msgstr "recept počinje prije prve mete"
+msgstr "recept počinje ispred prvog cilja"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
-msgstr "nedostaje propis prije recepta"
+msgstr "nedostaje pravilo ispred recepta"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (jeste li htjeli TAB umjesto 8 razmaka?)"
+msgstr "nedostaje separator (Mislili ste TAB umjesto 8 razmaka?)"
 
 # Grr, živjela engleska množina!  I što sad da radim s onim %s-om?
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "nedostaju znakovi razdvajanja (%s)"
+msgstr "nedostaje separator"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
-msgstr "nedostaje uzorak mete"
+msgstr "nedostaje uzorak za cilj"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
-msgstr "višestruki uzorci meta"
+msgstr "višestruki uzorci za cilj"
 
-#: read.c:1276
-#, fuzzy, c-format
+#: read.c:1268
+#, c-format
 msgid "target pattern contains no '%%'"
-msgstr "uzorak mete ne sadrži „%%”"
+msgstr "uzorak cilja ne sadrži ‘%%’"
 
-#: read.c:1398
-#, fuzzy
+#: read.c:1390
 msgid "missing 'endif'"
-msgstr "nedostaje â\80\9eendifâ\80\9d"
+msgstr "nedostaje â\80\98endifâ\80\99"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "prazno ime varijable"
 
-#: read.c:1471
-#, fuzzy
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
-msgstr "suviÅ¡an tekst nakon direktive â\80\9edefineâ\80\9d"
+msgstr "suviÅ¡an tekst nakon direktive â\80\98defineâ\80\99"
 
-#: read.c:1496
-#, fuzzy
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
-msgstr "nedostaje â\80\9eendefâ\80\9d, nedovrÅ¡en â\80\9edefineâ\80\9d"
+msgstr "nedostaje â\80\98endefâ\80\99, nedovrÅ¡en â\80\98defineâ\80\99"
 
-#: read.c:1524
-#, fuzzy
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
-msgstr "suviÅ¡an tekst nakon direktive â\80\9eendefâ\80\9d"
+msgstr "suviÅ¡an tekst nakon direktive â\80\98endefâ\80\99"
 
-#: read.c:1595
-#, fuzzy, c-format
+#: read.c:1588
+#, c-format
 msgid "extraneous text after '%s' directive"
-msgstr "suviÅ¡an tekst nakon direktive â\80\9e%sâ\80\9d"
+msgstr "suviÅ¡an tekst nakon direktive â\80\98%sâ\80\99"
 
-#: read.c:1596
-#, fuzzy, c-format
+#: read.c:1589
+#, c-format
 msgid "extraneous '%s'"
-msgstr "suviÅ¡an â\80\9e%sâ\80\9d"
+msgstr "suviÅ¡an â\80\98%sâ\80\99"
 
-#: read.c:1624
-#, fuzzy
+#: read.c:1617
 msgid "only one 'else' per conditional"
-msgstr "samo jedan â\80\9eelseâ\80\9d po uvjetu"
+msgstr "samo jedan â\80\98elseâ\80\99 po uvjetu"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
-msgstr "Izobličena definicija o meti ovisne varijable"
+msgstr "Nepravilno formirana definicija varijable specifične za cilj"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "preduvjeti ne mogu biti definirani u receptima"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
-msgstr "pomiješani implicitni i statički propisi uzoraka"
+msgstr "pomiješana su implicitna pravila i pravila sa statičkim uzorcima"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
-msgstr "pomiješani implicitni i normalni propisi"
+msgstr "pomiješana su implicitna i normalna pravila"
 
-#: read.c:2091
-#, fuzzy, c-format
+#: read.c:2085
+#, c-format
 msgid "target '%s' doesn't match the target pattern"
-msgstr "meta „%s” ne odgovara uzorku mete"
+msgstr "cilj ‘%s’ se ne podudara s uzorkom cilja"
 
-#: read.c:2106 read.c:2152
-#, fuzzy, c-format
+#: read.c:2100 read.c:2146
+#, c-format
 msgid "target file '%s' has both : and :: entries"
-msgstr "datoteka mete „%s” ima unose i kod : i kod ::"
+msgstr ""
+"u ciljnu datoteku ‘%s’ uneseni su  (dvotočka) ‘:’ i  (dvije dvotočke) ‘::’"
 
-#: read.c:2112
-#, fuzzy, c-format
+#: read.c:2106
+#, c-format
 msgid "target '%s' given more than once in the same rule"
-msgstr "meta „%s” je navedena više nego jednom u istom propisu."
+msgstr "cilj ‘%s’ je naveden više od jedanput u istom pravilu."
 
-#: read.c:2122
-#, fuzzy, c-format
+# prebrisati> brišući ukloniti, brišući poništiti, prebrisati dio teksta, odbaciti
+#: read.c:2116
+#, c-format
 msgid "warning: overriding recipe for target '%s'"
-msgstr "upozorenje: poništavam recept za metu „%s”"
+msgstr "upozorenje: recept za cilj ‘%s’ se poništava i preformira"
 
-#: read.c:2125
-#, fuzzy, c-format
+#: read.c:2119
+#, c-format
 msgid "warning: ignoring old recipe for target '%s'"
-msgstr "upozorenje: zanemarujem stari recept za metu „%s”"
+msgstr "upozorenje: stari recept za cilj ‘%s’ se zanemaruje"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "pomiješani implicitni i normalni propisi"
+msgstr ""
+"*** pomiješana su implicitna i normalna pravila: to je zastarjela sintaksa"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
-msgstr "upozorenje: uočen je NUL znak; ostatak retka se zanemaruje"
+msgstr "upozorenje: pročitan je NUL znak; ostatak retka se zanemaruje"
 
-#: remake.c:230
-#, fuzzy, c-format
+#: remake.c:225
+#, c-format
 msgid "Nothing to be done for '%s'."
-msgstr "NiÅ¡ta za napraviti za â\80\9e%sâ\80\9d."
+msgstr "NiÅ¡ta za napraviti za â\80\98%sâ\80\99."
 
-#: remake.c:231
-#, fuzzy, c-format
+#: remake.c:226
+#, c-format
 msgid "'%s' is up to date."
-msgstr "â\80\9e%sâ\80\9d je ažuriran."
+msgstr "â\80\98%sâ\80\99 je ažuriran."
 
-#: remake.c:303
-#, fuzzy, c-format
+#: remake.c:322
+#, c-format
 msgid "Pruning file '%s'.\n"
-msgstr "Čistim datoteku „%s”.\n"
+msgstr "Pročišćavanje datoteke ‘%s’.\n"
 
-#: remake.c:390 remake.c:393
-#, fuzzy, c-format
+#: remake.c:405
+#, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
-msgstr "%sNema propisa za izradu mete „%s”, koji traži „%s”%s"
+msgstr "%sNema pravila za izradu cilja ‘%s’, potrebnog za ‘%s’%s"
 
-#: remake.c:402 remake.c:405
-#, fuzzy, c-format
+#: remake.c:415
+#, c-format
 msgid "%sNo rule to make target '%s'%s"
-msgstr "%sNema propisa za izradu mete „%s”%s"
+msgstr "%sNema pravila za izradu cilja ‘%s’%s"
 
-#: remake.c:426
-#, fuzzy, c-format
+#: remake.c:441
+#, c-format
 msgid "Considering target file '%s'.\n"
-msgstr "Razmatram datoteku mete „%s”.\n"
+msgstr "Razmatranje ciljne datoteke ‘%s’.\n"
 
-#: remake.c:433
-#, fuzzy, c-format
+#: remake.c:448
+#, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
-msgstr "Nedavno bezuspješno pokušao ažurirati datoteku „%s”.\n"
+msgstr "Nedavni pokušaj ažuriranja datoteke ‘%s’ nije uspio.\n"
 
-#: remake.c:445
-#, fuzzy, c-format
+#: remake.c:460
+#, c-format
 msgid "File '%s' was considered already.\n"
-msgstr "Datoteka â\80\9e%sâ\80\9d je veÄ\87 razmatrana.\n"
+msgstr "Datoteka â\80\98%sâ\80\99 je veÄ\87 bila razmatrana.\n"
 
-#: remake.c:455
-#, fuzzy, c-format
+#: remake.c:470
+#, c-format
 msgid "Still updating file '%s'.\n"
-msgstr "Još uvijek ažuriram datoteku „%s”.\n"
+msgstr "Datoteka ‘%s’ se još uvijek ažurira.\n"
 
-#: remake.c:458
-#, fuzzy, c-format
+#: remake.c:473
+#, c-format
 msgid "Finished updating file '%s'.\n"
-msgstr "Završio s ažuriranjem datoteke „%s”.\n"
+msgstr "Ažuriranje datoteke ‘%s’ je završeno.\n"
 
-#: remake.c:487
-#, fuzzy, c-format
+#: remake.c:502
+#, c-format
 msgid "File '%s' does not exist.\n"
-msgstr "Datoteka â\80\9e%sâ\80\9d ne postoji.\n"
+msgstr "Datoteka â\80\98%sâ\80\99 ne postoji.\n"
 
-#: remake.c:495
-#, fuzzy, c-format
+#: remake.c:510
+#, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
 msgstr ""
-"*** Upozorenje: .LOW_RESOLUTION_TIME datoteka â\80\9e%sâ\80\9d ima vremensku oznaku "
-"visoke rezolucije"
+"*** Upozorenje: .LOW_RESOLUTION_TIME datoteka â\80\98%sâ\80\99 ima vremensku oznaku "
+"visoke točnosti"
 
-#: remake.c:508 remake.c:1040
-#, fuzzy, c-format
+#: remake.c:523 remake.c:1055
+#, c-format
 msgid "Found an implicit rule for '%s'.\n"
-msgstr "Pronađen implicitni propis za „%s”.\n"
+msgstr "Pronađeno je implicitno pravilo za ‘%s’.\n"
 
-#: remake.c:510 remake.c:1042
-#, fuzzy, c-format
+#: remake.c:525 remake.c:1057
+#, c-format
 msgid "No implicit rule found for '%s'.\n"
-msgstr "Nisam našao nijedan implicitni propis za „%s”.\n"
+msgstr "Nijedno implicitno pravilo nije pronađeno za ‘%s’.\n"
 
-#: remake.c:516
-#, fuzzy, c-format
+#: remake.c:531
+#, c-format
 msgid "Using default recipe for '%s'.\n"
-msgstr "Koristim zadani recept za „%s”.\n"
+msgstr "Rabi se standardni recept za ‘%s’.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
-msgstr "Kružna ovisnost %s <- %s ispuštena."
+msgstr "Kružna ovisnost %s <- %s je odbačena."
 
-#: remake.c:675
-#, fuzzy, c-format
+#: remake.c:690
+#, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
-msgstr "Završeni preduvjeti datoteke mete „%s”.\n"
+msgstr "Završeni su preduvjeti za ciljnu datoteku ‘%s’.\n"
 
-#: remake.c:681
-#, fuzzy, c-format
+#: remake.c:696
+#, c-format
 msgid "The prerequisites of '%s' are being made.\n"
-msgstr "Preduvjeti „%s” se izrađuju.\n"
+msgstr "Preduvjeti za ‘%s’ se izrađuju.\n"
 
-#: remake.c:695
-#, fuzzy, c-format
+#: remake.c:710
+#, c-format
 msgid "Giving up on target file '%s'.\n"
-msgstr "Odustajem od datoteke mete „%s”.\n"
+msgstr "Odustajem od ciljne datoteke ‘%s’.\n"
 
-#: remake.c:700
-#, fuzzy, c-format
+#: remake.c:715
+#, c-format
 msgid "Target '%s' not remade because of errors."
-msgstr "Meta „%s” nije ponovo izrađena zbog grešaka."
+msgstr "Cilj ‘%s’ nije prerađen (ponovno izrađen) zbog grešaka."
 
 # Nisam siguran da sam ovo ispravno shvatio.
-#: remake.c:752
-#, fuzzy, c-format
+# bp:  impose a specific ordering on the rules to be invoked without forcing the target to be updated if one of those rules is executed
+#: remake.c:767
+#, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
-msgstr "Preduvjet „%s” služi samo za redoslijed za metu „%s”.\n"
+msgstr ""
+"Preduvjet ‘%s’ je ‘order-only’ za cilj ‘%s’.\n"
+"  ‘order-only’: ‘make’ neće preraditi (remake) „normalne“ recepte ako se "
+"izmjeni\n"
+" vremenska oznaka na ‘order-only’ cilju (target) (normalno, ‘make’ uvijek "
+"preradi\n"
+" (remake) recepte, kad god se izmjeni vremenska oznaka na bilo kojem "
+"objektu).\n"
 
-#: remake.c:757
-#, fuzzy, c-format
+#: remake.c:772
+#, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
-msgstr "Preduvjet â\80\9e%sâ\80\9d mete â\80\9e%sâ\80\9d ne postoji.\n"
+msgstr "Preduvjet â\80\98%sâ\80\99 za cilj â\80\98%sâ\80\99 ne postoji.\n"
 
-#: remake.c:762
-#, fuzzy, c-format
+#: remake.c:777
+#, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
-msgstr "Preduvjet â\80\9e%sâ\80\9d noviji je od mete â\80\9e%sâ\80\9d.\n"
+msgstr "Preduvjet â\80\98%sâ\80\99 je noviji (mlaÄ\91i) nego od od njega ovisan cilj â\80\98%sâ\80\99.\n"
 
-#: remake.c:765
-#, fuzzy, c-format
+#: remake.c:780
+#, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
-msgstr "Preduvjet â\80\9e%sâ\80\9d stariji je od mete â\80\9e%sâ\80\9d.\n"
+msgstr "Preduvjet â\80\98%sâ\80\99 je stariji nego od od njega ovisan cilj â\80\98%sâ\80\99.\n"
 
-#: remake.c:783
-#, fuzzy, c-format
+#: remake.c:798
+#, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
-msgstr "Meta „%s” je dvotočje, a nema preduvjete.\n"
+msgstr "Cilj ‘%s’ je s dvotočkom i nema preduvjeta.\n"
 
-#: remake.c:790
-#, fuzzy, c-format
+#: remake.c:805
+#, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
-msgstr "Nema recepta za „%s”, a nijedan preduvjet nije promijenjen.\n"
+msgstr ""
+"Nema recepta za ‘%s’ i nijedan od preduvjeta zapravo nije promijenjen.\n"
 
-#: remake.c:795
-#, fuzzy, c-format
+#: remake.c:810
+#, c-format
 msgid "Making '%s' due to always-make flag.\n"
-msgstr "Izrađujem „%s” zbog zastavice always-make.\n"
+msgstr "‘%s’ se zbog zastavice ‘always-make’ ponovno izrađuje.\n"
 
-#: remake.c:803
-#, fuzzy, c-format
+#: remake.c:818
+#, c-format
 msgid "No need to remake target '%s'"
-msgstr "Ponovna izrada mete „%s” nije potrebna"
+msgstr "Nema potrebe preraditi cilj ‘%s’"
 
-#: remake.c:805
-#, fuzzy, c-format
+#: remake.c:820
+#, c-format
 msgid "; using VPATH name '%s'"
-msgstr "; koristim VPATH ime „%s”"
+msgstr "; rabi se naziv ‘%s’ za VPATH"
 
-#: remake.c:825
-#, fuzzy, c-format
+#: remake.c:840
+#, c-format
 msgid "Must remake target '%s'.\n"
-msgstr "Moram ponovo izraditi metu „%s”.\n"
+msgstr "Cilj ‘%s’ se mora preraditi.\n"
 
-#: remake.c:831
-#, fuzzy, c-format
+#: remake.c:846
+#, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
-msgstr "  Zanemarujem VPATH ime „%s”.\n"
+msgstr "  Zanemaruje se naziv ‘%s’ za VPATH.\n"
 
-#: remake.c:840
-#, fuzzy, c-format
+#: remake.c:855
+#, c-format
 msgid "Recipe of '%s' is being run.\n"
-msgstr "Recept za â\80\9e%sâ\80\9d se izvrÅ¡ava.\n"
+msgstr "Recept za â\80\98%sâ\80\99 se upravo primjenjuje.\n"
 
-#: remake.c:847
-#, fuzzy, c-format
+#: remake.c:862
+#, c-format
 msgid "Failed to remake target file '%s'.\n"
-msgstr "Nisam uspio ponovo izraditi datoteku mete „%s”.\n"
+msgstr "Prerada (remake) ciljne datoteke ‘%s’ nije uspjela.\n"
 
-#: remake.c:850
-#, fuzzy, c-format
+#: remake.c:865
+#, c-format
 msgid "Successfully remade target file '%s'.\n"
-msgstr "Uspješno ponovo izrađena datoteka mete „%s”.\n"
+msgstr "Ciljna datoteka ‘%s’ je uspješno prerađena .\n"
 
-#: remake.c:853
-#, fuzzy, c-format
+#: remake.c:868
+#, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
-msgstr "Datoteku mete „%s” treba ponovo izraditi zbog -q.\n"
+msgstr ""
+"Ciljnu datoteku ‘%s’ treba ponovno preraditi (remake) s opcijom ‘-q’.\n"
 
-#: remake.c:1048
-#, fuzzy, c-format
+#: remake.c:1063
+#, c-format
 msgid "Using default commands for '%s'.\n"
-msgstr "Koristim zadane naredbe za „%s”.\n"
+msgstr "Rabe se standardne naredbe za ‘%s’.\n"
 
-#: remake.c:1397
-#, fuzzy, c-format
+#: remake.c:1429
+#, c-format
 msgid "Warning: File '%s' has modification time in the future"
-msgstr "Upozorenje: Vrijeme uređivanja datoteke „%s” je u budućnosti"
+msgstr ""
+"Upozorenje: Vremenska oznaka modifikacije datoteke ‘%s’ je u budućnosti"
 
-#: remake.c:1411
-#, fuzzy, c-format
+#: remake.c:1443
+#, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr ""
-"Upozorenje: Vrijeme uređivanja datoteke „%s” je %s sekundi u budućnosti"
+"Upozorenje: Vremenska oznaka modifikacije datoteke ‘%s’ je za %s s u "
+"budućnosti"
 
-#: remake.c:1610
-#, fuzzy, c-format
+#: remake.c:1646
+#, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
-msgstr "Element „%s” iz .LIBPATTERNS nije uzorak"
+msgstr ".LIBPATTERNS član ‘%s’ nije uzorak"
 
+# Customs' is literal (a library name). See README.customs.
 #: remote-cstms.c:122
 #, c-format
 msgid "Customs won't export: %s\n"
-msgstr "Customs neće izvesti: %s\n"
+msgstr "‘Customs’ nije eksportiran: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
 msgstr ""
 "\n"
-"# Implicitni propisi"
+"# Implicitna pravila"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
 msgstr ""
 "\n"
-"# Nema implicitnih propisa."
+"# Nema implicitnih pravila."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
 "# %u implicit rules, %u"
 msgstr ""
 "\n"
-"# %u implicitnih propisa, %u"
+"# %u implicitnih pravila, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
-msgstr " završni."
+msgstr " terminal."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
-msgstr "BUG: neispravan num_pattern_rules!  %u != %u"
+msgstr "BUG: pogrešan ‘num_pattern_rules’!  %u != %u"
 
 #: signame.c:84
 msgid "unknown signal"
 msgstr "nepoznat signal"
 
+# Keep signal names in sync with GNU libc translations.
 #: signame.c:92
 msgid "Hangup"
-msgstr "Završetak"
+msgstr "Završetak (SIGHUP)"
 
 #: signame.c:95
 msgid "Interrupt"
-msgstr "Prekid"
+msgstr "Prekid (SIGINT)"
 
 #: signame.c:98
 msgid "Quit"
-msgstr "Izlaz"
+msgstr "Kraj (SIGQUIT)"
 
 #: signame.c:101
 msgid "Illegal Instruction"
-msgstr "Nedozvoljena instrukcija"
+msgstr "Nedopuštena instrukcija (SIGILL)"
 
+# Breakpoint trap just means the processor has hit a breakpoint.Your process is running more than one thread.
 #: signame.c:104
 msgid "Trace/breakpoint trap"
-msgstr "Zamka za praćenje/prekidnu točku"
+msgstr "Prekid na kontrolnoj točki (SIGTRAP)"
 
 #: signame.c:109
 msgid "Aborted"
-msgstr "Prekinut"
+msgstr "Prekid (SIGABRT)"
 
 #: signame.c:112
 msgid "IOT trap"
-msgstr "IOT zamka"
+msgstr "IOT zamka (SIGIOT)"
 
 #: signame.c:115
 msgid "EMT trap"
-msgstr "EMT zamka"
+msgstr "EMT zamka (SIGEMT)"
 
 #: signame.c:118
 msgid "Floating point exception"
-msgstr "Iznimka pomičnog zareza"
+msgstr "Iznimka (operacije) s pomičnim zarezom/točkom (SIGFPE)"
 
 #: signame.c:121
 msgid "Killed"
-msgstr "Prekinut"
+msgstr "Uklonjen (SIGKILL)"
 
 #: signame.c:124
 msgid "Bus error"
-msgstr "Sabirnička greška"
+msgstr "Sabirnička greška (SIGBUS)"
 
 #: signame.c:127
 msgid "Segmentation fault"
-msgstr "Segmentacijska greška"
+msgstr "Segmentacijska greška (SIGSEGV)"
 
 #: signame.c:130
 msgid "Bad system call"
-msgstr "Neispravan sustavski poziv"
+msgstr "Nepravilan poziv sustavu (SIGSYS)"
 
+# a condition in programming (also known in POSIX as EPIPE error code and SIGPIPE signal), when a process requests an output to pipe or socket, which was closed by peer
 #: signame.c:133
 msgid "Broken pipe"
-msgstr "Prekinut cjevovod"
+msgstr "Prekinuta cijev (pipe) (SIGPIPE)"
 
 #: signame.c:136
 msgid "Alarm clock"
-msgstr "Budilica"
+msgstr "Budilica (SIGALRM)"
 
 #: signame.c:139
 msgid "Terminated"
-msgstr "Završen"
+msgstr "Završen (SIGTERM)"
 
 #: signame.c:142
 msgid "User defined signal 1"
-msgstr "Korisnički definiran signal 1"
+msgstr "Korisnikom definiran signal 1 (SIGUSR1)"
 
 #: signame.c:145
 msgid "User defined signal 2"
-msgstr "Korisnički definiran signal 2"
+msgstr "Korisnikom definiran signal 2 (SIGUSR2)"
 
 #: signame.c:150 signame.c:153
 msgid "Child exited"
-msgstr "Dijete je završilo"
+msgstr "Potomak je gotov (SIGCHLD)"
 
 #: signame.c:156
 msgid "Power failure"
-msgstr "Prekid napajanja"
+msgstr "Prekid napajanja (SIGPWR)"
 
 #: signame.c:159
 msgid "Stopped"
-msgstr "Zaustavljen"
+msgstr "Zaustavljen (SIGTSTP)"
 
 #: signame.c:162
 msgid "Stopped (tty input)"
-msgstr "Zaustavljen (tty ulaz)"
+msgstr "Zaustavljen (tty ulaz) (SIGTTIN)"
 
 #: signame.c:165
 msgid "Stopped (tty output)"
-msgstr "Zaustavljen (tty izlaz)"
+msgstr "Zaustavljen (tty izlaz) (SIGTTOU)"
 
 #: signame.c:168
 msgid "Stopped (signal)"
-msgstr "Zaustavljen (signalom)"
+msgstr "Zaustavljen (signal) (SIGSTOP)"
 
 #: signame.c:171
 msgid "CPU time limit exceeded"
-msgstr "Prekoračeno ograničenje procesorskog vremena"
+msgstr "Premašeno ograničenje procesorskog vremena (SIGXCPU)"
 
 #: signame.c:174
 msgid "File size limit exceeded"
-msgstr "Prekoračeno ograničenje veličine datoteke"
+msgstr "Prekoračena je dopuštena veličina datoteke (SIGXFS2)"
 
 # Kako prevesti "virtual timer"?
 #: signame.c:177
 msgid "Virtual timer expired"
-msgstr "Virtualna štoperica istekla"
+msgstr "Virtualno vrijeme (odbrojavanje vremena) je isteklo (SIGVTALRM)"
 
 # Kako prevesti "profiling timer"?
 #: signame.c:180
 msgid "Profiling timer expired"
-msgstr "Štoperica profiliranja istekla"
+msgstr "Vrijeme (odbrojavanje vremena) za profiliranje je isteklo (SIGPROF)"
 
 #: signame.c:186
 msgid "Window changed"
-msgstr "Promijenjen prozor"
+msgstr "Prozor promijenjen (SIGWINCH)"
 
 #: signame.c:189
 msgid "Continued"
-msgstr "Nastavljen"
+msgstr "Nastavljen (SIGCONT)"
 
 #: signame.c:192
 msgid "Urgent I/O condition"
-msgstr "Hitno U/I stanje"
+msgstr "Hitna U/I situacija"
 
 #: signame.c:199 signame.c:208
 msgid "I/O possible"
-msgstr "U/I moguć"
+msgstr "U/I moguć (SIGURG)"
 
 # Jesu li ova dva signala vic ili što?  U svakom slučaju, ovo su samo
 # descriptioni.  Za svaki slučaj, nisam ih dirao.
 #: signame.c:202
 msgid "SIGWIND"
-msgstr "SIGWIND"
+msgstr "(SIGWIND) Prozor je izmijenjen"
 
 #: signame.c:205
 msgid "SIGPHONE"
-msgstr "SIGPHONE"
+msgstr "(SIGPHONE) Promjena statusa tel. linije"
 
 #: signame.c:211
 msgid "Resource lost"
-msgstr "Resurs izgubljen"
+msgstr "Resurs izgubljen (SIGLOST)"
 
 #: signame.c:214
 msgid "Danger signal"
-msgstr "Signal za opasnost"
+msgstr "Signal za opasnost (SIGDANGER)"
 
 #: signame.c:217
 msgid "Information request"
-msgstr "Zahtjev za informacijom"
+msgstr "Zahtjev za obavijestima (SIGINFO)"
 
 #: signame.c:220
 msgid "Floating point co-processor not available"
-msgstr "Koprocesor za rad s pomičnim zarezom nije dostupan"
+msgstr "Koprocesor za rad s pomičnim zarezom/točkom nije dostupan (SIGNOFP)"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
 msgstr ""
+"\n"
+"%s Nema međumemorija za ‘strcache’\n"
 
-#: strcache.c:266
-#, fuzzy, c-format
+#: strcache.c:304
+#, c-format
 msgid ""
 "\n"
 "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu "
 "B\n"
 msgstr ""
-"%s strcache korišteno: ukupno = %d (%d) / max = %d / min = %d / prosjek = "
-"%d\n"
+"\n"
+"%s ‘strcache’ međumemorije: %lu (%lu) / nizova = %lu\n"
+" / pohrana = %lu B / prosjek = %lu B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
+"%s trenutačna međumemorija: veličina = %hu B / upotreba = %hu B\n"
+" / broj = %hu / prosjek = %hu B\n"
 
-#: strcache.c:280
-#, fuzzy, c-format
+#: strcache.c:319
+#, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
-msgstr ""
-"%s strcache korišteno: ukupno = %d (%d) / max = %d / min = %d / prosjek = "
-"%d\n"
+msgstr "%s ostala upotreba: ukupno = %lu B / broj = %lu / prosjek = %lu B\n"
 
-#: strcache.c:283
-#, fuzzy, c-format
+#: strcache.c:322
+#, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
-"%s strcache slobodno: ukupno = %d (%d) / max = %d / min = %d / prosjek = %d\n"
+"%s ostalo slobodno: ukupno = %lu B / max = %lu B / min = %lu B / prosjek = "
+"%hu B\n"
 
-#: strcache.c:287
-#, fuzzy, c-format
+#: strcache.c:326
+#, c-format
 msgid ""
 "\n"
 "%s strcache performance: lookups = %lu / hit rate = %lu%%\n"
 msgstr ""
 "\n"
-"%s # nizova u strcache: %d / pretrage = %lu / pronalasci = %lu\n"
+"%s ‘strcache’ učinkovitost: pretrage = %lu / postotak pogodaka = %lu%%\n"
 
-#: strcache.c:289
-#, fuzzy
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
 msgstr ""
-"\n"
-"# statistike tablice raspršivanja datoteka:\n"
+"# statistika hash-tablice:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automatsko"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
-msgstr "zadano"
+msgstr "standardno"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
-msgstr "okolina"
+msgstr "okružje"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
-msgstr "datoteka izrade"
+msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
-msgstr "okolina pod -e"
+msgstr "okružje pod -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "naredbeni redak"
 
-#: variable.c:1617
-#, fuzzy
+#: variable.c:1647
 msgid "'override' directive"
-msgstr "direktiva „override”"
+msgstr "‘override’ direktiva"
 
-#: variable.c:1628
-#, fuzzy, c-format
+#: variable.c:1658
+#, c-format
 msgid " (from '%s', line %lu)"
-msgstr " (iz â\80\9e%sâ\80\9d, redak %lu)"
+msgstr " (iz â\80\98%sâ\80\99, redak %lu)"
 
-#: variable.c:1691
+# https://en.wikipedia.org/wiki/Hash_table
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
-msgstr "# statistike tablice raspršivanja skupova varijabli:\n"
+msgstr "# statistika varijabli u hash-tablici:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2116,124 +2163,74 @@ msgstr ""
 "\n"
 "# Varijable\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
 msgstr ""
 "\n"
-"# Uzorcima svojstvene vrijednosti varijabli"
+"# Vrijednosti varijabli specifične za uzorke"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
 msgstr ""
 "\n"
-"# Nema uzorcima svojstvenih vrijednosti varijabli."
+"# Nema vrijednosti varijabli specifične za uzorke."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
 "# %u pattern-specific variable values"
 msgstr ""
 "\n"
-"# %u uzorcima svojstvenih vrijednosti varijabli"
+"# %u uzorcima specifične vrijednosti varijabli"
 
 #: variable.h:224
-#, fuzzy, c-format
+#, c-format
 msgid "warning: undefined variable '%.*s'"
-msgstr "upozorenje: nedefinirana varijabla â\80\9e%.*sâ\80\9d"
+msgstr "upozorenje: nedefinirana varijabla â\80\98%.*sâ\80\99"
 
 #: vmsfunctions.c:91
 #, c-format
 msgid "sys$search() failed with %d\n"
-msgstr "sys$search() nije uspio s %d\n"
+msgstr "neuspješan sys$search() s greškom %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Upozorenje: Prazno preusmjeravanje\n"
-
-#: vmsjobs.c:183
-#, fuzzy, c-format
-msgid "internal error: '%s' command_state"
-msgstr "interna greška: „%s” command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
-"-upozorenje, možda ćete morati ponovo omogućiti upravljanje s CTRL-Y iz DCL-"
+"-upozorenje, možda ćete morati ponovno omogućiti obrađivanje CTRL-Y iz DCL-"
 "a.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "UGRAĐEN [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "UGRAĐEN CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "UGRAĐEN CD %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Nepoznata ugrađena naredba „%s”\n"
-
-#: vmsjobs.c:592
+#: vmsjobs.c:1228
 #, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Greška, prazna naredba\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Preusmjeren ulaz iz %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Preusmjerene greške u %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
-msgstr "Dodaj izlaz na %s\n"
+msgstr "Izlaz pripojen na kraj %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Preusmjeren izlaz u %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
-msgstr "Dodaj %.*s i počisti\n"
+msgstr "%.*s pripojiti i počistiti\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
-msgstr "Umjesto toga, izvršavam %s\n"
-
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Greška pri pokretanju, %d\n"
+msgstr "Izvršava se %s radije\n"
 
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2241,46 +2238,80 @@ msgstr ""
 "\n"
 "# VPATH putanje za pretraživanje\n"
 
-#: vpath.c:600
-#, fuzzy
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
-msgstr "# Nema â\80\9evpathâ\80\9d putanja za pretraživanje."
+msgstr "# Nema â\80\98vpathâ\80\99 putanja za pretraživanje."
 
-#: vpath.c:602
-#, fuzzy, c-format
+#: vpath.c:622
+#, c-format
 msgid ""
 "\n"
 "# %u 'vpath' search paths.\n"
 msgstr ""
 "\n"
-"# %u â\80\9evpathâ\80\9d putanja za pretraživanje.\n"
+"# %u â\80\98vpathâ\80\99 putanje za pretraživanje.\n"
 
-#: vpath.c:605
-#, fuzzy
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
 msgstr ""
 "\n"
-"# Nema opÄ\87enite putanje za pretraživanje (varijabla â\80\9eVPATHâ\80\9d)."
+"# Nema opÄ\87enite putanje za pretraživanje (varijabla â\80\98VPATHâ\80\99)."
 
-#: vpath.c:611
-#, fuzzy
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
 "# "
 msgstr ""
 "\n"
-"# OpÄ\87enita putanja za pretraživanje (varijabla â\80\9eVPATHâ\80\9d):\n"
+"# OpÄ\87enita putanja za pretraživanje (varijabla â\80\98VPATHâ\80\99):\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr ""
+"Broj vremenskih odsječaka (slots) poslužitelja poslova je ograničen na %d\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "kreiranje semafora poslužitelja poslova: (Greška %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"interna greška: semafor ‘%s’ poslužitelja poslova je nemoguće otvoriti:\n"
+"(Greska%ld: %s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Klijent poslužitelja poslova (semafor %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "oslobađanje semafora poslužitelja poslova: (Greška %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "čekanje na semafor ili potomački proces (Greška %ld: %s)"
+
 #~ msgid "#  Invalid value in `update_status' member!"
 #~ msgstr "#  Neispravna vrijednost u elementu „update_status”!"
 
 #~ msgid "*** [%s] Error 0x%x (ignored)"
 #~ msgstr "*** [%s] Greška 0x%x (zanemarena)"
 
+#~ msgid "*** [%s] Error 0x%x"
+#~ msgstr "*** [%s] Greška 0x%x"
+
 #~ msgid "Invoking recipe from %s:%lu to update target `%s'.\n"
 #~ msgstr "Pozivam recept iz %s:%lu za ažuriranje mete „%s”.\n"
 
@@ -2290,6 +2321,10 @@ msgstr ""
 #~ msgid "internal error: multiple --jobserver-fds options"
 #~ msgstr "interna greška: višestruko pojavljivanje opcije --jobserver-fds"
 
+# Treba li ovo prevesti?
+#~ msgid "dup jobserver"
+#~ msgstr "dup poslužitelj poslova"
+
 #~ msgid "virtual memory exhausted"
 #~ msgstr "virtualna memorija iscrpljena"
 
@@ -2309,9 +2344,36 @@ msgstr ""
 #~ "# statistike strcache tablice raspršivanja:\n"
 #~ "# "
 
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Upozorenje: Prazno preusmjeravanje\n"
+
+#~ msgid "internal error: `%s' command_state"
+#~ msgstr "interna greška: „%s” command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "UGRAĐEN [%s][%s]\n"
+
 #~ msgid "BUILTIN RM %s\n"
 #~ msgstr "UGRAĐEN RM %s\n"
 
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Nepoznata ugrađena naredba „%s”\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Greška, prazna naredba\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Preusmjeren ulaz iz %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Preusmjerene greške u %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Preusmjeren izlaz u %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Greška pri pokretanju, %d\n"
+
 #~ msgid "Syntax error, still inside '\"'\n"
 #~ msgstr "Greška u sintaksi, još uvijek unutar '\"'\n"
 
index 44d6423..fabe186 100644 (file)
Binary files a/po/id.gmo and b/po/id.gmo differ
index ef0dd99..debe65b 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU make 4.0\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
 "PO-Revision-Date: 2014-07-30 18:30+0700\n"
 "Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -45,83 +45,83 @@ msgstr "touch: Anggota '%s' tidak terdapat dalam '%s'"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: Kode kembali tidak baik dari ar_member_touch pada '%s'"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr "lbr$set_module() gagal untuk mengekstrak info module, status = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control() gagal dengan status = %d"
 
-#: arscan.c:255
+#: arscan.c:261
 #, fuzzy, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr "tidak dapat membuka perpustakaan '%s' untuk melihat anggota '%s'"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Anggota '%s'%s: %ld bytes pada %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (nama mungkin akan di potong)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr " Tanggal %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr " uid = %d, gid = %d, mode = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "Recipe has too many lines (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Berhenti.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Anggota archive '%s' mungkin palsu: tidak dihapus"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Anggota archive '%s' mungkin palsu; tidak dihapus"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Menghapus berkas '%s'"
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Menghapus berkas '%s'"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  perintah untuk dijalankan"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (bawaan):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (dari '%s', baris %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -129,62 +129,62 @@ msgstr ""
 "\n"
 "# Direktori\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: tidak dapat melihat statistik.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (kunci %s, mtime %d): tidak dapat dibuka.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (perangkat %d, inode [%d,%d,%d]): tidak dapat dibuka.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (perangkat %ld, inode %ld): tidak dapat dibuka.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (kunci %s, mtime %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (perangkat %d, inode [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (perangkat %ld, inode %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Tidak"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " berkas, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "tidak"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " tidak mungkin"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " sejauh ini."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " tidak mungkin dalam direktori %lu.\n"
@@ -194,154 +194,154 @@ msgstr " tidak mungkin dalam direktori %lu.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Variabel rekursif '%s' menunjuk pada dirinya sendiri"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "referensi variabel tidak diselesaikan"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Perintah di spesifikasikan untuk berkas '%s' di %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr "Perintah untuk berkas '%s' ditemukan dalam pencarian aturan implisit,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr ""
 "tetapi '%s' sekarang dipertimbangkan sebagai berkas yang sama dengan '%s'."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "Perintah untuk '%s' akan diabaikan untuk menghargai '%s'."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "tidak dapat mengubah nama dari kolon-tunggal '%s' ke kolon-ganda '%s'"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "tidak dapat mengubah nama kolon-ganda '%s' menjadi kolon-tunggal '%s'"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Menghapus berkas sementara '%s'"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Menghapus berkas sementara...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Waktu saat ini"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Timestamp diluar jangkauan; digantikan dengan %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Bukan sebuah target:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Berkas sebelumnya (dibutuhkan oleh .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Phony target (dibutuhkan oleh .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Baris perintah target."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Merupakan baku, MAKEFILES atau -include/sinclude makefile."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "# Tidak ada aturan implisit."
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Pencarian aturan implisit sudah selesai."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Pencarian aturan implisit belum selesai."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Pola/implisit atau statis stem: '%s'\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Berkas merupakan dibutuhkan untuk sementara."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Juga membuat:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Waktu ubah sudah diperiksa."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Berkas tidak ada."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Berkas sudah sangat tua."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Terakhir dimodifikasi %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Berkas sudah diperbarui."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Berkas belum diperbarui."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Perintah sedang berjalan (INI MERUPAKAN SEBUAH BUG)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Perintah ketergantungan sedang berjalan (INI MERUPAKAN SEBUAH BUG)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Sukses memperbarui."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Perlu untuk diupdate (-q diset)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Gagal untuk mengupdate."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Nilai yang salah dalam anggota 'command_state' !"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -349,7 +349,7 @@ msgstr ""
 "\n"
 "# Berksa"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -359,104 +359,122 @@ msgstr ""
 "# berkas statistik hash-table:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: Field '%s' not cached: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "argumen pertama untuk fungsi 'word' bukan numerik"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "argumen pertama untuk fungsi 'word' harus lebih besar dari 0"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "argumen pertama untuk fungsi 'wordlist' bukan numerik"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "argumen kedua dari fungsi 'wordlist' bukan numerik"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(In) gagal (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(Err) gagal (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() gagal (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() gagal\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Membersihkan berkas batch sementara %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "open: %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "menulis: %s: %s"
 
-#: function.c:2209
-#, c-format
-msgid "Invalid file operation: %s"
+#: function.c:2230 function.c:2267
+#, fuzzy, c-format
+msgid "close: %s: %s"
+msgstr "open: %s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr ""
+
+#: function.c:2262
+#, fuzzy, c-format
+msgid "read: %s: %s"
+msgstr "menulis: %s: %s"
+
+#: function.c:2275
+#, fuzzy, c-format
+msgid "file: invalid file operation: %s"
 msgstr "Invalid file operation: %s"
 
-#: function.c:2324
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "Jumlah dari argumen (%d) untuk fungsi '%s' tidak mencukupi"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "Tidak terimplementasi dalam platform ini: fungsi '%s'"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "fungsi '%s' tidak diselesaikan: hilang '%c'"
 
-#: function.c:2591
+#: function.c:2650
 #, fuzzy
 msgid "Empty function name"
 msgstr "Empty function name\n"
 
-#: function.c:2593
+#: function.c:2652
 #, fuzzy, c-format
 msgid "Invalid function name: %s"
 msgstr "Invalid function name: %s\n"
 
-#: function.c:2595
+#: function.c:2654
 #, fuzzy, c-format
 msgid "Function name too long: %s"
 msgstr "Function name too long: %s\n"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
+msgid "Invalid minimum argument count (%u) for function %s"
 msgstr "Jumlah dari argumen (%d) untuk fungsi %s tidak mencukupi\n"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
+msgid "Invalid maximum argument count (%u) for function %s"
 msgstr "Jumlah dari argumen (%d) untuk fungsi %s tidak mencukupi\n"
 
 #: getopt.c:659
@@ -555,7 +573,7 @@ msgstr "Mencari aturan implisit untuk '%s'.\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Mencari aturan implisit untuk anggota-archive pada '%s'.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Menghindari aturan implisit rekursi.\n"
 
@@ -599,100 +617,76 @@ msgstr "Menemukan persyaratan '%s' sebagai VPATH '%s'\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Mencari aturan dengan berkas sementara '%s'.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Tidak dapat membuat berkas sementara\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (core di-dump)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (diabaikan)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<bawaan>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: recipe for target '%s' failed"
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
+#: job.c:510
+#, fuzzy, c-format
+msgid "%s[%s: %s] Error %d%s"
 msgstr "%s[%s] Error %d%s"
 
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Error 0x%x%s"
-
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Menunggu pekerjaan yang belum selesai...."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Proses anak yang masih berjalan %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (remote)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Reaping anak hilang %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Reaping winning child %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Membersihkan berkas batch sementara %s\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Membersihkan berkas batch sementara %s failed (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Menghilangkan proses anak %p PID %s%s dari rantai.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "release jobserver semaphore: (Error %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Melepaskan token dari proses anak %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "menulis jobserver"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() gagal untuk menjalankan proses (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -701,98 +695,94 @@ msgstr ""
 "\n"
 "Terhitung %d argumen gagal untuk dijalankan\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Meletakkan proses anak %p (%s) PID %s%s pada rantai proses.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "semaphore or child process wait: (Error %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Memperoleh token untuk proses anak %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "membaca pipa pekerjaan"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: archive '%s' tidak ada"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr ""
 "%s: tidak terdapat aturan untuk membuat target '%s', dibutuhkan oleh %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "tidak dapat memaksa mencapai batas beban pada sistem operasi ini"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "tidak dapat memaksa mencapai batas beban: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "tidak ada lagi file handles: tidak dapat menggandakan stdin\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "tidak ada lagi file handles: tidak dapat menggandakan stdout\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "tidak ada lagi file handles: tidak dapat menggandakan stderr\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Tidak dapat mengembalikan stdin\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Tidak dapat mengembalikan stdout\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "Tidak dapat mengembalikan stderr\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "make reaped child pid %s, tetap menunggu untuk pid %s\n"
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: Perintah tidak ada"
+
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
 msgstr "%s: Perintah tidak ada"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Shell program tidak ditemukan"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: mungkin kehabisan ruang environment"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL berubah (sebelumnya '%s', sekarang '%s')\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Membuat berkas batch sementara %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -800,7 +790,7 @@ msgstr ""
 "Batch file contents:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -809,7 +799,7 @@ msgstr ""
 "Batch file contents:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (baris %d) shell context tidak baik (!unixy && !batch_mode_shell)\n"
@@ -838,30 +828,30 @@ msgstr "Failed to load symbol %s from %s: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "Empty symbol name for load: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Loading symbol %s from %s\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Parallel jobs '-j' tidak didukung dalam platform ini."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Opsi:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Diabaikan untuk kompatibilitas.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 "  -B, --always-make           Membuat semua target secara tidak "
 "kondisional.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -869,17 +859,17 @@ msgstr ""
 "  -C DIRECTORI, --directory=DIREKTORI\n"
 "                              Pindah ke DIREKTORI sebelum melakukan apapun.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          Menampilkan banyak informasi debug.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=FLAGS]             Menampilkan berbagai tipe informasi debug.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -887,13 +877,13 @@ msgstr ""
 "  -e, --environment-overrides\n"
 "                              Variabel lingkungan memaksa makefiles.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -901,17 +891,17 @@ msgstr ""
 "  -f BERKAS, --file=BERKAS, --makefile=BERKAS\n"
 "                              Baca BERKAS sebagai sebuah makefile.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Tampilkan pesan ini dan keluar.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 "  -i, --ignore-errors         Abaikan kesalahan dari perintah yang "
 "dijalankan.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -920,7 +910,7 @@ msgstr ""
 "                              Cari di DIREKTORI untuk makefile yang "
 "disertakan.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -928,13 +918,13 @@ msgstr ""
 "  -j [N], --jobs[=N]          Ijinkan N kerja secara bersamaan. Kerja tidak "
 "terhingga jika tidak diberikan argumen.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Tetap jalan ketika target tidak dapat dibuat.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -944,7 +934,7 @@ msgstr ""
 "                              Jangan menjalankan multiple pekerjaan kecuali "
 "beban dibawah N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -952,7 +942,7 @@ msgstr ""
 "  -L, --check-symlink-times   Gunakan waktu mtime terbaru diantara symlinks "
 "dan target.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -962,7 +952,7 @@ msgstr ""
 "                               Jangan menjalankan perintah apapun; tampilkan "
 "saja apa yang akan dikerjakan.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -972,7 +962,7 @@ msgstr ""
 "                              Pertimbangkan BERKAS sudah sangat tua dan "
 "jangan membuatnya lagi.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -980,11 +970,11 @@ msgstr ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       Tampilkan basis data internal make.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -992,21 +982,21 @@ msgstr ""
 "  -q, --question              Tidak menjalankan perintah. Mengeluarkan "
 "status saja dan mengatakan up to date.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Aturan implisit bawaan tidak digunakan.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables  Non-aktifkan konfigurasi variabel bawaan.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Jangan menampilkan perintah.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1014,26 +1004,26 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Matikan opsi -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Sentuh target dari pada membuat kembali.\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr ""
 "  --trace                          Menampilkan banyak informasi debug.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr "  -v, --version               Tampilkan versi dari make dan keluar.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Tampilkan directory saat ini.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1041,7 +1031,7 @@ msgstr ""
 "  --no-print-directory        Matikan opsi -w, walaupun opsi ini diaktifkan "
 "secara implisit.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1050,7 +1040,7 @@ msgstr ""
 "                              Pertimbangkan BERKAS sebagai sebuah berkas "
 "baru.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1058,26 +1048,26 @@ msgstr ""
 "  --warn-undefined-variables  Peringatkan akan adanya variabel yang tidak "
 "terdefinisi yang direferensikan.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "`string' kosong tidak valid sebagai nama file"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "spesifikasi tingkat debug tidak diketahui '%s'"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "unknown output-sync type '%s'"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: Interupsi/Exception diterima (kode = 0x%lx, alamat = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1092,180 +1082,136 @@ msgstr ""
 "ExceptionFlags = %lx\n"
 "ExceptionAddress = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Akses dilanggar: operasi tulis pada alamat 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Akses dilanggar: operasi baca pada alamat 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() diset pada default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "find_and_set_shell() jalur pencarian di set pada default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s dihentikan selama 30 detik..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "selesai tidur(30). Melanjutkan.\n"
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Jobserver client (semaphore %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "internal error: tidak valid --jobserver-fds string '%s'"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Jobserver client (fds %d,%d)\n"
+"Peringatan: server pekerja tidak ada: menggunakan -j1. Tambahkan '+' pada "
+"aturan make paling atas."
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
 "Peringatan: -jN dipaksakan dalam submake: non-aktifkan mode server pekerja."
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "dup server pekerja"
-
-#: main.c:1570
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-"Peringatan: server pekerja tidak ada: menggunakan -j1. Tambahkan '+' pada "
-"aturan make paling atas."
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefile dari standard input dispesifikasikan dua kali."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (berkas sementara)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (berkas sementara)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Parallel jobs (-j) tidak didukung dalam platform ini."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Mereset kembali ke mode satu job (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Jobserver slots limited to %d\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "creating jobserver semaphore: (Error %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "membuat pipa pekerjaan"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "inisiasi pipa server pekerja"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Symbolic links tidak didukung: menonaktifkan opsi -L."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Memperbarui makefiles....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "Makefile '%s' mungkin berupa loop; tidak membuat lagi.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Gagal membuat lagi makefile '%s'."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Makefile yang dimasukan '%s' tidak ditemukan."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Makefile '%s' tidak ditemukan"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Tidak dapat kembali ke direktori asal."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Menjalankan kembali[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (berkas sementara): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL berisi lebih dari satu target"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Target tidak dispesifikasikan dan tidak ditemukan makefile"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Tidak ada targets"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Memperbarui tujuan target....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "Peringatan: Clock skew terdeteksi. Pembuatan anda mungkin tidak sempurna"
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Penggunaan: %s [opsi] [target] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1274,7 +1220,7 @@ msgstr ""
 "\n"
 "Program ini dibuat untuk %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1283,32 +1229,32 @@ msgstr ""
 "\n"
 "Program ini dibuat untuk %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Laporkan bugs kepada <bug-make@gnu.org>\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "opsi '%s%s' membutuhkan sebuah argument string yang tidak kosong"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "opsi '-%c' membutuhkan sebuah argument `string' yang tidak kosong"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sAplikasi ini dibuat untuk %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sAplikasi ini dibuat untuk %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1321,7 +1267,7 @@ msgstr ""
 "%sIni adalah aplikasi gratis: anda bebas untuk mengubah dan menyebarkannya.\n"
 "%sTidak ada JAMINAN, sepanjang diperbolehkan oleh hukum.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1330,7 +1276,7 @@ msgstr ""
 "\n"
 "# Membuat basis data, ditampilkan %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1339,29 +1285,29 @@ msgstr ""
 "\n"
 "# Selesai membuat basis data %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Kesalahan tidak diketahui %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: pengguna %lu (ril %lu), grup %lu (ril %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Akses terinisialisasi"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Akses pengguna"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Buat akses"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Akses anak"
 
@@ -1424,226 +1370,267 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "membuat pipa pekerjaan"
+
+#: posixos.c:72 posixos.c:227
+#, fuzzy
+msgid "duping jobs pipe"
+msgstr "membuat pipa pekerjaan"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "inisiasi pipa server pekerja"
+
+#: posixos.c:90
+#, fuzzy, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "internal error: tidak valid --jobserver-fds string '%s'"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Jobserver client (fds %d,%d)\n"
+
+#: posixos.c:109
+#, fuzzy
+msgid "jobserver pipeline"
+msgstr "inisiasi pipa server pekerja"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "menulis jobserver"
+
+#: posixos.c:268
+#, fuzzy
+msgid "pselect jobs pipe"
+msgstr "membaca pipa pekerjaan"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "membaca pipa pekerjaan"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Membaca makefiles...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "Membaca makefile '%s'"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (tidak terdapat tujuan baku)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (jalur pencarian)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (tidak peduli)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (tidak terdapat ekspansi tilde ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "Skipping UTF-8 BOM in makefile '%s'\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "Skipping UTF-8 BOM in makefile buffer\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "sintak salah dalam kondisional"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: failed to load"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "perintah dijalankan sebelum target pertama"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "hilang aturan sebelum menjalankan perintah"
 
-#: read.c:1131
+#: read.c:1124
 #, fuzzy
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr " (apakah yang anda maksud TAB dari pada 8 buah spasi?)"
 
-#: read.c:1133
+#: read.c:1126
 #, fuzzy
 msgid "missing separator"
 msgstr "pemisah %s hilang"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "pola target hilang"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "pola target banyak"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "pola target tidak memiliki '%%'"
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "hilang 'endif'"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "nama variabel kosong"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "Kelebihan text sesudah 'endef' directive"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "hilang 'endef', tidak diselesaikan 'define'"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "kelebihan text sesudah 'endef' directive"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "kelebihan text sesudah '%s' directive"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "kelebihan '%s'"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "hanya satu 'else' dalam setiap kondisi"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Definisi variable target-specific memiliki format yang salah"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "persyaratan tidak dapat didefinisikan dalam script perintah"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "aturan pola implisit dan static tercampur"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "aturan implisit dan aturan normal tercampur"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "target '%s' tidak cocok dengan pola target"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "target berkas '%s' keduanya memiliki masukan : dan ::"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "target '%s' memberikan lebih dari sekali dalam aturan sama."
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "peringatan: memaksa perintah untuk target '%s'"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "peringatan: menghiraukan perintah lama untuk target '%s'"
 
-#: read.c:2229
+#: read.c:2223
 #, fuzzy
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr "aturan implisit dan aturan normal tercampur"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "peringatan: karakter NUL terlihat; baris selanjutnya dihiraukan"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Tidak ada yang harus dilakukan untuk '%s'."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "'%s' sudah baru."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Pruning file '%s'.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr ""
 "%sTidak terdapat aturan untuk membuat target '%s', dibutuhkan oleh '%s'%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sTidak terdapat aturan untuk membuat target '%s'%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Mempertimbangkan berkas target '%s'.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Baru saja dicoba dan gagal untuk memperbarui berkas '%s'.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Berkas '%s' baru saja dipertimbangkan.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Sedang memperbarui berkas '%s'.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Selesai memperbarui berkas '%s'.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Berkas '%s' tidak ada.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1651,137 +1638,137 @@ msgstr ""
 "*** Peringatan: .LOW_RESOLUTION_TIME berkas '%s' memiliki sebuah penanda "
 "waktu dengan resolusi tinggi"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Ditemukan sebuah aturan implisit untuk '%s'.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Tidak terdapat aturan implisit untuk membuat '%s'.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Menggunakan perintah baku untuk '%s'.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Ketergantungan %s <- %s melingkar dijatuhkan."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Selesai melakukan semua persyaratan untuk berkas target '%s'.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Persyaratan untuk membuat '%s' sedang dibuat.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Menyerah untuk membuat target berkas '%s'.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Target '%s' tidak dibuat lagi karena ada errors."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Persyaratan untuk '%s' adalah order-only untuk target '%s'.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Persyaratan untuk '%s' untuk target '%s' tidak ada.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Persyaratan untuk '%s' lebih baru dari pada target '%s'.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Persyaratan untuk '%s' lebih tua dari pada target '%s'.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "Target '%s' merupakan kolon-ganda dan tidak memiliki syarat.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "Tidak ada perintah untuk '%s' dan persyaratan tidak berubah.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Membuat '%s' karena adanya tanda always-make.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "Tidak perlu membuat lagi target '%s'"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; menggunakan nama VPATH '%s'"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Harus membuat lagi target '%s'.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr " Mengabaikan nama VPATH '%s'.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Perintah dari '%s' sedang dijalankan.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Gagal membuat lagi target berkas '%s'.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Sukses membuat kembali target berkas '%s'.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Target berkas '%s' dibutuhkan untuk membuat kembali dengan opsi -q.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Menggunakan perintah baku untuk '%s'.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Peringatan: Berkas '%s' memiliki waktu modifikasi dimasa depan"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Peringatan: Berkas '%s' memiliki waktu modifikasi %s s kedepan"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ".LIBPATTERNS elemen '%s' bukan merupakan sebuah pattern"
@@ -1791,7 +1778,7 @@ msgstr ".LIBPATTERNS elemen '%s' bukan merupakan sebuah pattern"
 msgid "Customs won't export: %s\n"
 msgstr "Custom tidak akan men-export: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1799,7 +1786,7 @@ msgstr ""
 "\n"
 "# Aturan implisit."
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1807,7 +1794,7 @@ msgstr ""
 "\n"
 "# Tidak ada aturan implisit."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1816,11 +1803,11 @@ msgstr ""
 "\n"
 "# %u aturan implisit, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminal."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "BUG: num_pattern_rules salah! %u != %u"
@@ -1981,7 +1968,7 @@ msgstr "Permintaan informasi"
 msgid "Floating point co-processor not available"
 msgstr "co-processor titik pecahan tidak tersedia"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -1990,7 +1977,7 @@ msgstr ""
 "\n"
 "%s # dari buffer strcache: \n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2001,26 +1988,26 @@ msgstr ""
 "%s strcache free: %lu total = (%lu) / mak = %lu / min = %lu / rata-rata = "
 "%lu\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "besar %s strcache: total = %lu / count = %lu / rata-rata = %lu\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 "%s strcache free: total = %lu / mak = %lu / min = %lu / rata-rata = %hu\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2029,7 +2016,7 @@ msgstr ""
 "\n"
 "%s strcache performance: lookups = %lu / hit rate = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2037,44 +2024,44 @@ msgstr ""
 "# berkas statistik hash-table:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "otomatis"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "baku"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "lingkungan"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "lingkungan dibawah opsi -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "baris perintah"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "'override' direktif"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (dari '%s', baris %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# statistik variable set hash-table:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2082,7 +2069,7 @@ msgstr ""
 "\n"
 "# Variabel\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2090,7 +2077,7 @@ msgstr ""
 "\n"
 "# Nilai Variabel Pola-Spesifik"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2098,7 +2085,7 @@ msgstr ""
 "\n"
 "# Tidak terdapat nilai variabel pola-spesifik"
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2117,88 +2104,38 @@ msgstr "peringatan: variabel '%.*s' tidak terdefinisi"
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() gagal dengan kode %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Peringatan: redirection kosong\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "kesalahan internal: '%s' command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 "-warning, kamu mungkin telah mengaktifkan pengontrolan CTRL-Y dari DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "BAWAAN [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "BAWAAN CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "BAWAAN CD %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Perintah bawaan '%s' tidak diketahui\n"
-
-#: vmsjobs.c:592
+#: vmsjobs.c:1228
 #, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Error, perintah kosong\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Meneruskan masukan dari %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Meneruskan error ke %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Meneruskan output ke %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Meneruskan output ke %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Append %.*s and cleanup\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Menjalankan perintah %s\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Gagal spawning, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2206,11 +2143,11 @@ msgstr ""
 "\n"
 "# VPATH Jalur Pencarian\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# Tidak ada 'vpath' dalam jalur pencarian."
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2219,7 +2156,7 @@ msgstr ""
 "\n"
 "# %u 'vpath' jalur pencarian.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2227,7 +2164,7 @@ msgstr ""
 "\n"
 "# Tidak ada ('VPATH' variabel) umum dalam jalur pencarian."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2237,21 +2174,92 @@ msgstr ""
 "# Jalur pencarian umum untuk variabel 'VPATH':\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Jobserver slots limited to %d\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "creating jobserver semaphore: (Error %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Jobserver client (semaphore %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "release jobserver semaphore: (Error %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "semaphore or child process wait: (Error %ld: %s)"
+
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s: recipe for target '%s' failed"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] Error 0x%x%s"
+
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
 #~ msgid "internal error: multiple --sync-mutex options"
 #~ msgstr "internal error: opsi --sync-mutex lebih dari satu"
 
 #~ msgid "internal error: multiple --jobserver-fds options"
 #~ msgstr "internal error: opsi --jobserver-fds lebih dari satu"
 
+#~ msgid "dup jobserver"
+#~ msgstr "dup server pekerja"
+
 #~ msgid "virtual memory exhausted"
 #~ msgstr "Kehabisan memori maya"
 
 #~ msgid "write error"
 #~ msgstr "error menulis"
 
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Peringatan: redirection kosong\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "kesalahan internal: '%s' command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "BAWAAN [%s][%s]\n"
+
 #~ msgid "BUILTIN RM %s\n"
 #~ msgstr "BAWAAN RM %s\n"
 
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Perintah bawaan '%s' tidak diketahui\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Error, perintah kosong\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Meneruskan masukan dari %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Meneruskan error ke %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Meneruskan output ke %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Gagal spawning, %d\n"
+
 #~ msgid "#  Invalid value in `update_status' member!"
 #~ msgstr "#  Nilai yang salah dalam anggota `update_status' !"
 
index dd76258..2e47fbd 100644 (file)
Binary files a/po/it.gmo and b/po/it.gmo differ
index 6502255..43ca834 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: make 4.0\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
 "PO-Revision-Date: 2013-10-11 14:58+0200\n"
 "Last-Translator: Francesco Groccia <frgroccia@gmail.com>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -45,88 +45,88 @@ msgstr "touch: il membro \"%s\" non esiste in \"%s\""
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: codice di uscita errato da ar_member_touch su \"%s\""
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 "lbr$set_module() non è riuscita a estrarre informazioni sul modulo, stato = "
 "%d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control() non riuscita con lo stato = %d"
 
-#: arscan.c:255
+#: arscan.c:261
 #, fuzzy, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr "impossibile aprire la libreria \"%s\" per cercare il membro \"%s\""
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Membro \"%s\"%s: %ld byte a %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (il nome potrebbe essere troncato)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Data %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, modo = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "Il set di istruzioni ha troppe righe (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Interruzione.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr ""
 "*** [%s] Il membro di archivio \"%s\" potrebbe essere inesistente; non "
 "eliminato"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr ""
 "*** Il membro di archivio \"%s\" potrebbe essere inesistente; non eliminato"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Eliminazione del file \"%s\""
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Eliminazione del file \"%s\""
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  set di istruzioni da eseguire"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (comando interno):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (da \"%s\", riga %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -134,62 +134,62 @@ msgstr ""
 "\n"
 "# Directory\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: impossibile eseguire stat.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (key %s, mtime %d) non può essere aperto.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (device %d, inode [%d,%d,%d]) non può essere aperto.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (device %ld, inode %ld) non può essere aperto.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (key %s, mtime %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (device %d, inode [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (device %ld, inode %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "No"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " file, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "no"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " impossibilità"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " finora."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " impossibilità nelle directory %lu.\n"
@@ -199,161 +199,161 @@ msgstr " impossibilità nelle directory %lu.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "La variabile ricorsiva \"%s\" si autoreferenzia (alla fine)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "riferimento alla variabile non terminato"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "È stato specificato un set di istruzioni per il file \"%s\" a %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ""
 "È stato trovato un set di istruzioni per il file \"%s\" mediante una regola "
 "di ricerca implicita,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "ma ora \"%s\" viene considerato lo stesso file di \"%s\"."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ""
 "Il set di istruzioni per \"%s\" verrà ignorato in favore di quello per \"%s"
 "\"."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 "impossibile rinominare la regola \"due punti\" \"%s\" con la regola \"doppio "
 "due punti\" \"%s\""
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr ""
 "impossibile rinominare la regola \"doppio due punti\" \"%s\" con la regola "
 "\"due punti\" \"%s\""
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Eliminazione del file intermedio \"%s\""
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Rimozione dei file intermedi...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Ora corrente"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: intervallo errato per la marcatura temporale; sostituzione di %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Non è un obiettivo:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  File \"precious\" (prerequisito di .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Obiettivo \"phony\" (prerequisito di .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Obiettivo a riga di comando."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "# Un makefile predefinito, da MAKEFILES, o da -include/sinclude."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "#  Regola incorporata"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Regola di ricerca implicita completata."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Regola di ricerca implicita non completata."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Stem implicito/statico del modello: \"%s\"\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Il file è un prerequisito intermedio."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Inoltre, genera:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Ora di modifica mai controllata."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Il file non esiste."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Il file è molto vecchio."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Ultima modifica %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Il file è stato aggiornato."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Il file non è stato aggiornato."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Set di istruzioni attualmente in esecuzione (QUESTO È UN BUG)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Dipendenze del set di istruzioni in esecuzione (QUESTO È UN BUG)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Aggiornato con successo."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Richiede di essere aggiornato (-q è impostato)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Aggiornamento non riuscito."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Valore illecito nel membro \"command_state\"!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -361,7 +361,7 @@ msgstr ""
 "\n"
 "# File"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -371,104 +371,122 @@ msgstr ""
 "# statistiche tabella hash dei file:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: Campo \"%s\" non memorizzato: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "primo argomento non numerico per la funzione \"word\""
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "il primo argomento per la funzione \"word\" deve essere maggiore di 0"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "primo argomento non numerico per la funzione \"wordlist\""
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "secondo argomento non numerico per la funzione \"wordlist\""
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(In) non riuscita (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_open_pipe: DuplicateHandle(Err) non riuscita (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() non riuscita (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() non riuscita\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Pulitura del file batch temporaneo %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "apertura: %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "scrittura: %s: %s"
 
-#: function.c:2209
-#, c-format
-msgid "Invalid file operation: %s"
+#: function.c:2230 function.c:2267
+#, fuzzy, c-format
+msgid "close: %s: %s"
+msgstr "apertura: %s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr ""
+
+#: function.c:2262
+#, fuzzy, c-format
+msgid "read: %s: %s"
+msgstr "scrittura: %s: %s"
+
+#: function.c:2275
+#, fuzzy, c-format
+msgid "file: invalid file operation: %s"
 msgstr "Operazione sui file non valida: %s"
 
-#: function.c:2324
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "numero di argomenti non sufficienti (%d) per la funzione \"%s\""
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "non implementata su questa piattaforma: funzione \"%s\""
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "chiamata non terminata alla funzione \"%s\": \"%c\" mancante"
 
-#: function.c:2591
+#: function.c:2650
 #, fuzzy
 msgid "Empty function name"
 msgstr "Nome della funzione vuoto\n"
 
-#: function.c:2593
+#: function.c:2652
 #, fuzzy, c-format
 msgid "Invalid function name: %s"
 msgstr "Nome della funzione non valido: %s\n"
 
-#: function.c:2595
+#: function.c:2654
 #, fuzzy, c-format
 msgid "Function name too long: %s"
 msgstr "Nome della funzione troppo lungo: %s\n"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
+msgid "Invalid minimum argument count (%u) for function %s"
 msgstr "numero di argomenti non sufficienti (%d) per la funzione \"%s\"\n"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
+msgid "Invalid maximum argument count (%u) for function %s"
 msgstr "numero di argomenti non sufficienti (%d) per la funzione \"%s\"\n"
 
 #: getopt.c:659
@@ -567,7 +585,7 @@ msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr ""
 "Ricerca di una regola implicita per il membro di archivio per \"%s\".\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Evitata la ricorsione della regola implicita.\n"
 
@@ -611,101 +629,77 @@ msgstr "Trovato il prerequisito \"%s\" come VPATH \"%s\"\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Ricerca di una regola con il file intermedio \"%s\".\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Impossibile creare un file temporaneo\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (creato dump del core)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (ignorato)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<incorporato>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: set di istruzioni per l'obiettivo \"%s\" non riuscito"
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
+#: job.c:510
+#, fuzzy, c-format
+msgid "%s[%s: %s] Error %d%s"
 msgstr "%s[%s] Errore %d%s"
 
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Errore 0x%x%s"
-
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Attesa per i processi non terminati...."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Processo figlio vivo %p (%s) con PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (remoto)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Interruzione del processo figlio perdente %p con PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Interruzione del processo figlio vincente %p con PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Pulitura del file batch temporaneo %s\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Pulitura del file batch temporaneo %s non riuscita (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr ""
 "Rimozione del processo figlio %p con PID %s%s dalla catena di esecuzione.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "rilascio del semaforo del jobserver: (Errore %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Token rilasciato per il processo figlio %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "scrittura del jobserver"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() non riuscita all'avvio del processo (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -714,105 +708,101 @@ msgstr ""
 "\n"
 "Contati %d argomenti nell'avvio fallito\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr ""
 "Inserimento del processo figlio %p (%s) con PID %s%s nella catena di "
 "esecuzione.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "attendere semaforo o processo figlio (Errore %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Token ottenuto per il processo figlio %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "lettura della pipe dei processi"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: l'obbiettivo \"%s\" non esiste"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: aggiorna l'obbiettivo \"%s\" a causa di: %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr ""
 "impossibile far rispettare i limiti di carico su questo sistema operativo"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "impossibile far rispettare il limite di carico: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
 "nessun'altra gestione del file: impossibile duplicare lo standard input\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
 "nessun'altra gestione del file: impossibile duplicare lo standard output\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
 "nessun'altra gestione del file: impossibile duplicare lo standard error\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Impossibile ripristinare lo standard input\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Impossibile ripristinare lo standard output\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "Impossibile ripristinare lo standard error\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr ""
 "make ha interrotto il processo figlio con pid %s, è ancora in attesa del "
 "processo con pid %s\n"
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: comando non trovato"
+
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
 msgstr "%s: comando non trovato"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: shell non trovata"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: lo spazio dell'ambiente potrebbe essere esaurito"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL cambiata (era \"%s\", adesso è \"%s\")\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Creazione del file batch temporaneo %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -820,7 +810,7 @@ msgstr ""
 "Contenuti del file batch:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -829,7 +819,7 @@ msgstr ""
 "Contenuti del file batch:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
@@ -859,30 +849,30 @@ msgstr "Caricamento del simbolo %s da %s non riuscito: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "Nome del simbolo vuoto per il caricamento: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Caricamento del simbolo %s da %s\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "L'operazione \"load\" non è supportata su questa piattaforma."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Opzioni:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Ignorato per compatibilità.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 "  -B, --always-make           Genera tutti gli obiettivi "
 "incondizionatamente.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -891,17 +881,17 @@ msgstr ""
 "                              Cambia DIRECTORY prima di fare qualunque "
 "cosa.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          Mostra molte informazioni di debug.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=FLAGS]             Mostra diversi tipi di informazioni di debug.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -910,13 +900,13 @@ msgstr ""
 "                              Le variabili ambiente sovrascrivono i "
 "makefile.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "  --eval=TESTO               Analizza STRINGA come estratta dal makefile.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -924,16 +914,16 @@ msgstr ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Legge FILE come un makefile.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Mostra questo messaggio ed esce.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 "  -i, --ignore-errors         Ignora gli errori dai set di istruzioni.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -941,7 +931,7 @@ msgstr ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Cerca nella DIRECTORY per i makefile inclusi.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -949,14 +939,14 @@ msgstr ""
 "  -j [N], --jobs[=N]          Permette N processi alla volta; infiniti se "
 "non viene specificato l'argomento.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Continua l'esecuzione quando non è possibile "
 "creare alcuni obiettivi.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -966,7 +956,7 @@ msgstr ""
 "                              Non avvia processi multipli a meno che il "
 "carico di lavoro non sia sotto N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -974,7 +964,7 @@ msgstr ""
 "  -L, --check-symlink-times   Usa il più recente mtime tra i collegamenti "
 "simbolici e l'obiettivo.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -984,7 +974,7 @@ msgstr ""
 "                              Non esegue alcun set di istruzioni; lo stampa "
 "solamente.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -994,7 +984,7 @@ msgstr ""
 "                              Considera il FILE come molto vecchio e non "
 "riesegue make.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -1003,11 +993,11 @@ msgstr ""
 "                              Sincronizza l'output dei processi paralleli "
 "dal TIPO.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       Stampa il database interno di make.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1015,22 +1005,22 @@ msgstr ""
 "  -q, --question              Non avvia alcun set di istruzioni; lo stato di "
 "uscita indica se è aggiornato.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Disabilita le regole implicite interne.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables  Disabilita le impostazioni delle variabili "
 "interne.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Non visualizza i set di istruzioni.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1039,27 +1029,27 @@ msgstr ""
 "                            Disattiva l'opzione -k.\n"
 
 # ## touch = in questo contesto è simile alla funzione del comando 'touch'
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Esegue il touch degli obiettivi invece di "
 "ricrearli.\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                     Stampa informazioni di tracciamento.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 "  -v, --version               Stampa il numero di versione di make ed esce.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Stampa la directory corrente.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1067,7 +1057,7 @@ msgstr ""
 "  --no-print-directory        Disattiva l'opzione -w, anche se era stata "
 "attivata implicitamente.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1075,7 +1065,7 @@ msgstr ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Considera il FILE come nuovo di zecca.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1083,27 +1073,27 @@ msgstr ""
 "  --warn-undefined-variables  Avvisa quando viene referenziata una variabile "
 "non definita.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "una stringa vuota non è valida come nome di file"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "livello di debug specificato sconosciuto \"%s\""
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "tipo di output-sync (sincronizzazione dell'output) sconosciuto \"%s\""
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr ""
 "%s: catturata una interruzione/eccezione (codice = 0x%lx, indirizzo = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1118,186 +1108,141 @@ msgstr ""
 "ExceptionFlags = %lx\n"
 "ExceptionAddress = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Violazione accesso: operazione di scrittura all'indirizzo 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Violazione accesso: operazione di lettura all'indirizzo 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() impostazione default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr ""
 "find_and_set_shell() impostazione del percorso di ricerca default_shell = "
 "%s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s viene sospeso per 30 secondi..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "sleep(30) eseguito. Continuazione.\n"
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
-"errore interno: impossibile aprire il semaforo del jobserver \"%s\": (Errore "
-"%ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Client del jobserver (semaforo %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "errore interno: stringa illecita per --jobserver-fds \"%s\""
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Client del jobserver (fds %d,%d)\n"
+"attenzione: jobserver non disponibile, viene usato -j1. Aggiungere \"+\" "
+"alla regola make superiore."
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
 "attenzione: -jN forzata nel submake: disattivazione della modalità jobserver."
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "jobserver duplicato"
-
-#: main.c:1570
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-"attenzione: jobserver non disponibile, viene usato -j1. Aggiungere \"+\" "
-"alla regola make superiore."
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Il Makefile dallo standard input è stato specificato due volte."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (file temporaneo)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (file temporaneo)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "I processi paralleli (-j) non sono supportati su questa piattaforma."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Reimpostazione alla modalità a singolo processo (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Slot del jobserver limitati a %d\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "Creazione del semaforo del jobserver: (Errore %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "creazione della pipe dei processi"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "inizializzazione nella pipe della modalità jobserver"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Collegamenti simbolici non supportati: opzione -L disabilitata."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Aggiornamento dei makefile....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr ""
 "Il makefile \"%s\" potrebbe entrare in un ciclo all'infinito; make non "
 "rieseguito.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Riesecuzione del makefile \"%s\" non riuscita."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Il makefile \"%s\" incluso non è stato trovato."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Il makefile \"%s\" non è stato trovato"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Impossibile ritornare alla directory originale."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Riesecuzione[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (file temporaneo): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL contiene più di un obiettivo"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Nessun obiettivo specificato e nessun makefile trovato"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Nessun obiettivo"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Aggiornamento degli obiettivi....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "attenzione: rilevato un tempo alterato. La creazione potrebbe essere "
 "incompleta."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Uso: %s [opzioni] [obiettivo] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1306,7 +1251,7 @@ msgstr ""
 "\n"
 "Questo programma è stato compilato per %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1315,32 +1260,32 @@ msgstr ""
 "\n"
 "Questo programma è stato compilato per %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Segnalare i bug a <bug-make@gnu.org>\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "l'opzione \"%s%s\" richiede un argomento stringa non vuoto"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "l'opzione \"-%c\" richiede un argomento intero positivo"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sCompilato per %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sCompilato per %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1354,7 +1299,7 @@ msgstr ""
 "ridistribuirlo.\n"
 "%s Non c'è ALCUNA GARANZIA, per quanto consentito dalle vigenti normative.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1363,7 +1308,7 @@ msgstr ""
 "\n"
 "# Generazione del database delle informazioni, creato il %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1372,29 +1317,29 @@ msgstr ""
 "\n"
 "# Generazione del database completata il %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Errore %d sconosciuto"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: utente %lu (reale %lu), gruppo %lu (reale %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Accesso inizializzato"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Accesso utente"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Accesso make"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Accesso processo figlio"
 
@@ -1457,232 +1402,273 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "creazione della pipe dei processi"
+
+#: posixos.c:72 posixos.c:227
+#, fuzzy
+msgid "duping jobs pipe"
+msgstr "creazione della pipe dei processi"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "inizializzazione nella pipe della modalità jobserver"
+
+#: posixos.c:90
+#, fuzzy, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "errore interno: stringa illecita per --jobserver-fds \"%s\""
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Client del jobserver (fds %d,%d)\n"
+
+#: posixos.c:109
+#, fuzzy
+msgid "jobserver pipeline"
+msgstr "inizializzazione nella pipe della modalità jobserver"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "scrittura del jobserver"
+
+#: posixos.c:268
+#, fuzzy
+msgid "pselect jobs pipe"
+msgstr "lettura della pipe dei processi"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "lettura della pipe dei processi"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Lettura dei makefile...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "Lettura del makefile \"%s\""
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (nessun obiettivo predefinito)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (percorso di ricerca)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (ignora)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (nessuna espansione per \"~\")"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "UTF-8 BOM nel makefile \"%s\" saltato\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "UTF-8 BOM nel makefile buffer saltato\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "sintassi illecita nel condizionale"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: caricamento non riuscito"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "il set di istruzioni inizia prima del primo obiettivo"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "regola mancante prima del set di istruzioni"
 
-#: read.c:1131
+#: read.c:1124
 #, fuzzy
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr " (si intendeva TAB invece di 8 spazi?)"
 
-#: read.c:1133
+#: read.c:1126
 #, fuzzy
 msgid "missing separator"
 msgstr "separatore %s mancante"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "modello mancante per l'obiettivo"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "modelli multipli per l'obiettivo"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "il modello dell'obiettivo non contiene alcun \"%%\""
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "\"endif\" mancante"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "nome vuoto della variabile"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "testo non pertinente dopo la direttiva \"define\""
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "\"endef\" mancante, \"define\" non terminato"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "testo non pertinente dopo la direttiva \"endef\""
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "testo non pertinente dopo la direttiva \"%s\""
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "\"%s\" non pertinente"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "un solo \"else\" per condizionale"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Definizione malformata della variabile specifica per l'obiettivo"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "i prerequisiti non possono essere definiti nei set di istruzioni"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "regole del modello implicite e statiche miste"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "regole implicite e normali miste"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr ""
 "il \"%s\" dell'obiettivo non corrisponde al modello dell'obiettivo stesso"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "Il file dell'obiettivo \"%s\" contiene sia : che ::"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr ""
 "l'obiettivo \"%s\" è stato fornito più di una volta nella stessa regola"
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr ""
 "attenzione: sovrascrittura del set di istruzioni per l'obiettivo \"%s\""
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr ""
 "attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo \"%s\""
 
-#: read.c:2229
+#: read.c:2223
 #, fuzzy
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr "regole implicite e normali miste"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr ""
 "attenzione: è stato rilevato il carattere NUL; il resto della riga viene "
 "ignorato"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Nessuna operazione da eseguire per \"%s\"."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "\"%s\" è aggiornato."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Pulizia del file \"%s\".\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr ""
 "%s Nessuna regola per generare l'obiettivo \"%s\", necessario per \"%s\"%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%s Nessuna regola per generare l'obiettivo \"%s\"%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Considerato il file obiettivo \"%s\".\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Tentativo recente di aggiornamento del file \"%s\" non riuscito.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Il file \"%s\" è già stato esaminato.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "L'aggiornamento del file \"%s\" è ancora in corso.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Aggiornamento del file \"%s\" terminato.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Il file \"%s\" non esiste.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1690,142 +1676,142 @@ msgstr ""
 "*** Attenzione: il file .LOW_RESOLUTION_TIME \"%s\" ha una marcatura "
 "temporale ad alta risoluzione"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Trovata una regola implicita per \"%s\".\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Nessuna regola implicita trovata per \"%s\".\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Uso del set di istruzioni predefinito per \"%s\".\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Dipendenza circolare %s <- %s scartata."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Prerequisiti del file obiettivo \"%s\" terminati.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Generazione dei prerequisiti di \"%s\" in corso.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Abbandono sul file obiettivo \"%s\".\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "L'obiettivo \"%s\" non è stato rigenerato a causa di errori."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Il prerequisito \"%s\" è solo per l'obiettivo \"%s\".\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Il prerequisito \"%s\" dell'obiettivo \"%s\" non esiste.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Il prerequisito \"%s\" è più nuovo di quello dell'obiettivo \"%s\".\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr ""
 "Il prerequisito \"%s\" è più vecchio di quello dell'obiettivo \"%s\".\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr ""
 "L'obiettivo \"%s\" è \"doppio due punti\" e non ha alcun prerequisito.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr ""
 "Nessun set di istruzioni per \"%s\" e nessun prerequisito effettivamente "
 "cambiato.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Generazione di \"%s\" a causa del flag \"always-make\".\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "Non è necessario rigenerare l'obiettivo \"%s\""
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; uso del nome VPATH \"%s\""
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "L'obiettivo \"%s\" deve essere rigenerato.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  nome VPATH \"%s\" ignorato.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Esecuzione del set di istruzioni per \"%s\" in corso.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Rigenerazione del file obiettivo \"%s\" non riuscita.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "File obiettivo \"%s\" rigenerato correttamente.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr ""
 "Il file obiettivo \"%s\" necessita di essere rigenerato con l'opzione -q.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Uso dei comandi predefiniti per \"%s\".\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Attenzione: il file \"%s\" ha un orario di modifica nel futuro"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Attenzione: il file \"%s\" ha un orario di modifica %s nel futuro"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "l'elemento .LIBPATTERNS \"%s\" non è un modello"
@@ -1835,7 +1821,7 @@ msgstr "l'elemento .LIBPATTERNS \"%s\" non è un modello"
 msgid "Customs won't export: %s\n"
 msgstr "Le personalizzazioni non verranno esportate: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1843,7 +1829,7 @@ msgstr ""
 "\n"
 "# Regole implicite"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1851,7 +1837,7 @@ msgstr ""
 "\n"
 "# Regole non implicite."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1860,11 +1846,11 @@ msgstr ""
 "\n"
 "# %u regole implicite, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminale."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "BUG: num_pattern_rules è errato!  %u != %u"
@@ -2025,7 +2011,7 @@ msgstr "Richiesta informazioni"
 msgid "Floating point co-processor not available"
 msgstr "Co-processore a virgola mobile non disponibile"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -2034,7 +2020,7 @@ msgstr ""
 "\n"
 "%s buffer strcache assenti\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2045,7 +2031,7 @@ msgstr ""
 "%s buffer strcache: %lu (%lu) / stringhe = %lu / memorizzazione = %lu B / "
 "media = %lu B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
@@ -2053,19 +2039,19 @@ msgstr ""
 "%s buffer corrente: dimensione = %hu B / usato = %hu B / count = %hu / media "
 "= %hu B\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s altra usata: totale = %lu B / count = %lu / media = %lu B\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 "%s altra libera: totale = %lu B / max = %lu B / min = %lu B / media = %hu B\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2074,7 +2060,7 @@ msgstr ""
 "\n"
 "%s prestazioni strcache: lookups = %lu / hit rate = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2082,44 +2068,44 @@ msgstr ""
 "# statistiche della tabella hash:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automatico"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "predefinito"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "ambiente"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "ambiente con l'opzione -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "riga di comando"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "direttiva \"override\""
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (da \"%s\", riga %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# statistiche tabella di hash del set di variabili:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2127,7 +2113,7 @@ msgstr ""
 "\n"
 "# Variabili\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2135,7 +2121,7 @@ msgstr ""
 "\n"
 "# Valori di variabile non specifici per il modello."
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2143,7 +2129,7 @@ msgstr ""
 "\n"
 "# Nessun valore per la variabile \"pattern-specific\"."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2162,89 +2148,39 @@ msgstr "attenzione: variabile \"%.*s\" non definita"
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() non riuscita con %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Attenzione: redirezione vuota\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "errore interno: command_state \"%s\""
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 "-attenzione, potrebbe essere necessario riabilitare la gestione di CTRL+Y da "
 "DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "[%s] INTERNO [%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "CD INTERNO %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "CD INTERNO %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Comando interno \"%s\" sconosciuto\n"
-
-#: vmsjobs.c:592
+#: vmsjobs.c:1228
 #, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Errore, comando vuoto\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Input rediretto da %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Errore rediretto a %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Accoda output a %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Output rediretto a %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Accoda %.*s e pulisce\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Verrà invece eseguito %s\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Errore nella generazione, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2252,11 +2188,11 @@ msgstr ""
 "\n"
 "# Percorsi di ricerca VPATH\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# Percorsi di ricerca \"vpath\" assenti."
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2265,7 +2201,7 @@ msgstr ""
 "\n"
 "# %u 'vpath' percorsi di ricerca.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2273,7 +2209,7 @@ msgstr ""
 "\n"
 "# Percorso di ricerca non generale (variabile \"VPATH\")."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2283,21 +2219,93 @@ msgstr ""
 "# Percorso di ricerca generale (variabile \"VPATH\"):\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Slot del jobserver limitati a %d\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "Creazione del semaforo del jobserver: (Errore %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"errore interno: impossibile aprire il semaforo del jobserver \"%s\": (Errore "
+"%ld: %s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Client del jobserver (semaforo %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "rilascio del semaforo del jobserver: (Errore %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "attendere semaforo o processo figlio (Errore %ld: %s)"
+
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s: set di istruzioni per l'obiettivo \"%s\" non riuscito"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] Errore 0x%x%s"
+
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
 #~ msgid "internal error: multiple --sync-mutex options"
 #~ msgstr "errore interno: opzioni multiple per --sync-mutex"
 
 #~ msgid "internal error: multiple --jobserver-fds options"
 #~ msgstr "errore interno: opzioni multiple per --jobserver-fds"
 
+#~ msgid "dup jobserver"
+#~ msgstr "jobserver duplicato"
+
 #~ msgid "virtual memory exhausted"
 #~ msgstr "memoria virtuale esaurita"
 
 #~ msgid "write error"
 #~ msgstr "errore in scrittura"
 
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Attenzione: redirezione vuota\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "errore interno: command_state \"%s\""
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "[%s] INTERNO [%s]\n"
+
 #~ msgid "BUILTIN RM %s\n"
 #~ msgstr "RM INTERNO %s\n"
 
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Comando interno \"%s\" sconosciuto\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Errore, comando vuoto\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Input rediretto da %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Errore rediretto a %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Output rediretto a %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Errore nella generazione, %d\n"
+
 #~ msgid "#  Invalid value in 'update_status' member!"
 #~ msgstr "#  Valore illecito nel membro \"update_status\"!"
 
index f79bcbd..980b2dc 100644 (file)
Binary files a/po/ja.gmo and b/po/ja.gmo differ
index 355e30d..f537702 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -4,22 +4,22 @@
 # Daisuke Yamashita <yamad@mb.infoweb.ne.jp>, 2001.
 #             Thanks to NISHIJIMA Takanori
 # GOTO Masanori <gotom@debian.or.jp>, 2003-2004.
-# Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2011, 2014
+# Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2011, 2014, 2016.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: make 4.0\n"
+"Project-Id-Version: make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2014-05-03 23:00+0900\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-25 18:18+0900\n"
 "Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
 "Language: ja\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Basepath: /factory/ja-po/make/make-4.0\n"
-"X-Generator: Poedit 1.5.4\n"
+"X-Poedit-Basepath: /factory/ja-po/make/make-4.1.90\n"
+"X-Generator: Poedit 1.8.7.1\n"
 
 #: ar.c:46
 #, c-format
@@ -50,83 +50,83 @@ msgstr "touch: メンバ '%s' は '%s' 内に存在しません"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: '%s' への ar_member_touch から異常な値が返りました"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr "lbr$set_module() がモジュール情報の抽出に失敗しました. 状態 = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control() が失敗しました. 状態 = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "ライブラリ '%s' を開けないため, メンバ '%s' の検索ができません"
+msgstr "ライブラリ '%s' を開けないため, メンバのステータス %d が検索できません"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "メンバ '%s'%s: %ld バイト at %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (名前が切り詰められたかも)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  日付 %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, mode = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "レシピの行数が多すぎます (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** 中断.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] 書庫のメンバ '%s' は多分偽物です ― 削除しませんでした"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** 書庫のメンバ '%s' は多分偽物です ― 削除しませんでした"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] ファイル '%s' を削除します"
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** ファイル '%s' を削除します"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  実行するレシピ"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (ビルトイン):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (ファイル '%s', %lu 行目):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -134,62 +134,62 @@ msgstr ""
 "\n"
 "# ディレクトリ\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: 状態を調べられませんでした.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (key %s, mtime %d): 開けませんでした.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (device %d, inode [%d,%d,%d]): 開けませんでした.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (device %ld, inode %ld): 開けませんでした.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (key %s, mtime %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (device %d, inode [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (device %ld, inode %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "0"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " 個のファイル, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "0"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " 個の適用不能ファイル名"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " (ここまでに)."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " 個の適用不能ファイル名 (%lu 個のディレクトリ内).\n"
@@ -199,153 +199,153 @@ msgstr " 個の適用不能ファイル名 (%lu 個のディレクトリ内).\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "再帰的変数 '%s' が(最終的に)それ自身を参照しています"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "終端のない変数参照"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "ファイル '%s' のためののレシピが %s:%lu で指定されました,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr "ファイル '%s' のためのレシピが暗黙ルールの探索で見つかりました,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "しかし今は '%s' と '%s' は同じファイルと見なされます."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "'%s' のためのレシピは, '%s' のためのものを優先するため無視されます."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "シングルコロン '%s' からダブルコロン '%s' に名前を変えられません"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "ダブルコロン '%s' からシングルコロン '%s' に名前を変えられません"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** 中間ファイル '%s' を削除します"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "中間ファイルを削除しています...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "現在時刻"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: タイムスタンプが範囲外です -- 代りに %s とします"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# ターゲットではありません:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  特別扱いのファイル (.PRECIOUS の必要条件)"
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  疑似ターゲット (.PHONY の必要条件)"
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  コマンドラインターゲット."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  デフォルトまたは MAKEFILES, -include/sinclude Makefile."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "# ビルトインルール"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  暗黙ルールの探索が行われました."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  暗黙ルールの探索は行われませんでした."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  暗黙/静的パターン語幹: '%s'\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  ファイルは中間必要条件です."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  さらに make:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  修正時刻がチェックされることはありません."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  ファイルが存在しません."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  ファイルが非常に古いです."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  最終修正 %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  ファイルは更新されています."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  ファイルは更新されていません."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  レシピを現在実行中です (*これはバグです*)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  依存関係レシピを実行中です (*これはバグです*)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  更新に成功しました."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  更新が必要です (-q がセットされています)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  更新に失敗しました."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  'command_state' メンバに無効な値です!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -353,7 +353,7 @@ msgstr ""
 "\n"
 "# ファイル"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -363,105 +363,122 @@ msgstr ""
 "# ファイルハッシュテーブルの状態:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: フィールド '%s' はキャッシュされていません: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "非数値の第1引数が 'word' 関数に与えられました"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "'word' 関数への第1引数は 0 より大きくなければなりません"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "非数値の第1引数が 'wordlist' 関数に与えられました"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "非数値の第2引数が 'wordlist' 関数に与えられました"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(In) が失敗 (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(Err) が失敗 (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() が失敗 (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe (): process_init_fd() が失敗\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "一時的なバッチファイル %s を消去します\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "file: ファイル名が指定されていません"
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "open: %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "write: %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr "無効なファイル操作: %s"
+msgid "close: %s: %s"
+msgstr "close: %s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "file: 引数が多すぎます"
 
-#: function.c:2324
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr "read: %s: %s"
+
+#: function.c:2275
+#, c-format
+msgid "file: invalid file operation: %s"
+msgstr "file: 無効なファイル操作: %s"
+
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "引数の数(%d)が関数 '%s' にとって不十分です"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "このプラットフォームでは実装されていません: 関数 '%s'"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "終端がない関数呼び出し '%s': '%c' がありません"
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "空の関数名\n"
+msgstr "空の関数名"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "無効な関数名: %s\n"
+msgstr "無効な関数名: %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "関数名が長すぎます: %s\n"
+msgstr "関数名が長すぎます: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "引数個数指定(最小値;%d)が無効です: 関数 '%s'\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "引数個数指定(最小値;%d)が無効です: 関数 %s"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "引数個数指定(最大値;%d)が無効です: 関数 '%s'\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "引数個数指定(最大値;%d)が無効です: 関数 %s"
 
 #: getopt.c:659
 #, c-format
@@ -560,7 +577,7 @@ msgstr "'%s' のための暗黙ルールを探します.\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "'%s' のための書庫メンバ暗黙ルールを探します.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "暗黙ルールの再帰を回避します.\n"
 
@@ -604,100 +621,76 @@ msgstr "VPATH '%2$s' として必要条件 '%1$s' を見つけました\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "中間ファイル '%s' のルールを探します.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "一時ファイルを作成できません\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (コアダンプしました)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (無視されました)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<ビルトイン>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: ターゲット '%s' のレシピで失敗しました"
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "%s[%s] エラー %d%s"
-
-#: job.c:519
+#: job.c:510
 #, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] エラー 0x%x%s"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] エラー %d%s"
 
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** 未完了のジョブを待っています...."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "生存子プロセス %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (リモート)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "失敗した子プロセス %p PID %s %s を回収します\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "成功した子プロセス %p PID %s %s を回収します\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "一時的なバッチファイル %s を消去します\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "一時的なバッチファイル %s の消去に失敗しました(%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "チェインから子プロセス %p PID %s%s を削除します.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "ジョブサーバのセマフォを解放します: (エラー %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "子プロセス %p (%s) の印を解放しました.\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "ジョブサーバへの write"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() が失敗しプロセスが起動できませんでした (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -706,97 +699,93 @@ msgstr ""
 "\n"
 "起動の失敗で %d 個の引数がカウントされました\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "チェインに子プロセス %p (%s) PID %s%s を取り込みました.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "セマフォ または 子プロセスを待っています: (エラー %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "子プロセス %p (%s) に印をつけました.\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "ジョブのパイプの read"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: ターゲット '%s' が存在しません"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: ターゲット '%s' を %s のために更新します"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "このオペレーティングシステムではシステム負荷制限を加えられません"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "システム負荷制限を課すことができませんでした: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "ファイルハンドルを使い尽くしました: 標準入力を複製できません\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "ファイルハンドルを使い尽くしました: 標準出力を複製できません\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "ファイルハンドルを使い尽くしました: 標準エラー出力を複製できません\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "標準入力を復元できませんでした\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "標準出力を復元できませんでした\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "標準エラー出力を復元できませんでした\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "make は pid %s の子プロセスを回収し, pid %s を待ち続けます\n"
 
-#: job.c:2458
+#: job.c:2275
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: コマンドが見つかりませんでした"
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: コマンドが見つかりませんでした\n"
 
-#: job.c:2518
+#: job.c:2277
+#, c-format
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: コマンドが見つかりませんでした\n"
+
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: シェルプログラムが見つかりませんでした"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe:環境設定のためのメモリを使い尽くすかもしれません"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL が変更されました (前は '%s', 今は '%s')\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "一時的なバッチファイル %s を作成します\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -804,7 +793,7 @@ msgstr ""
 "バッチファイルの内容:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -813,7 +802,7 @@ msgstr ""
 "バッチファイルの内容 :%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (%d 行目) 不正なシェルコンテキスト (!unixy && !batch_mode_shell)\n"
@@ -842,28 +831,28 @@ msgstr "シンボル %s を %s から読み込むのに失敗しました: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "空のシンボル名を読み込もうとしています: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "シンボル %s を %s から読み込んでいます\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "'load' 命令はこのプラットフォームでサポートされません."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "オプション:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      互換性のためのもので, 無視される.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make           無条件に全ターゲットを make する.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -872,16 +861,16 @@ msgstr ""
 "                              make 開始前にディレクトリ DIRECTORY へ移動す"
 "る.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          デバッグ情報を大量に表示する.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr "  --debug[=FLAGS]             様々なタイプのデバッグ情報を表示する.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -889,12 +878,12 @@ msgstr ""
 "  -e, --environment-overrides\n"
 "                              環境変数が makefile 中の記述に優先する\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr "  --eval=STRING               STRING を makefile の文として評価する.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -902,15 +891,15 @@ msgstr ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              FILE を makefile として読み込む\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  このメッセージを表示して終了する.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr "  -i, --ignore-errors         レシピから返ったエラーを無視する.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -920,7 +909,7 @@ msgstr ""
 "                              インクルードする makefile を探索する "
 "DIRECTORY.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -928,14 +917,14 @@ msgstr ""
 "  -j [N], --jobs[=N]          一度に N 個までのジョブを許可; 無引数だとジョブ"
 "数制限なし.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            あるターゲットが make できなくても実行を続け"
 "る.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -945,7 +934,7 @@ msgstr ""
 "                              負荷 が N 未満でない限り複数のジョブを開始しな"
 "い.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -953,7 +942,7 @@ msgstr ""
 "  -L, --check-symlink-times   シンボリックリンクとターゲットの中で一番新しい "
 "mtime を使う.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -962,7 +951,7 @@ msgstr ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              レシピを実際に実行しない; 表示するのみ.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -972,7 +961,7 @@ msgstr ""
 "                              FILE をとても古いものと見なして, 再 make しな"
 "い.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -980,11 +969,11 @@ msgstr ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              並列ジョブの出力を TYPE で揃える.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       make の内部データベースを表示する.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -992,19 +981,19 @@ msgstr ""
 "  -q, --question              レシピを実行しない; 更新済であるかどうかを終了"
 "ステータスで通知.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr "  -r, --no-builtin-rules      ビルトインの暗黙ルールを無効にする.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr "  -R, --no-builtin-variables  ビルトインの変数設定を無効にする.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       レシピを表示しない.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1012,26 +1001,26 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              -k オプションをオフにする.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 ターゲットを再 make する代わりにタッチする.\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                     トレース情報を表示する.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 "  -v, --version               make のバージョン番号を表示して終了する.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       カレントディレクトリを表示する.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1039,7 +1028,7 @@ msgstr ""
 "  --no-print-directory        -w をオフにする. 暗黙に有効な場合でもオフにす"
 "る.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1047,33 +1036,33 @@ msgstr ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              FILE をいつでも最新として見なす.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
 msgstr ""
 "  --warn-undefined-variables  未定義の変数が参照されたときに警告を発する.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "空の文字列はファイル名としては無効です"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "不明なデバッグレベル指定 '%s'"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "未知の出力同期型 '%s'"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: 割り込み/例外を捕捉しました (code = 0x%lx, addr = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1088,178 +1077,135 @@ msgstr ""
 "例外フラグ = %lx\n"
 "例外アドレス = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "アクセス保護違反: アドレス 0x%p での書き込み操作\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "アクセス保護違反: アドレス 0x%p での読み込み操作\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() は default_shell = %s に設定します\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "find_and_set_shell() パス探索で default_shell = %s にセットしました\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s は 30 秒間停止します..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "sleep(30) が終わりました. 続けます.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr "内部エラー: ジョブサーバ セマフォを開けません '%s': (エラー %ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "jobserver クライアント (セマフォ %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "内部エラー: 無効な --jobserver-fds 文字列 '%s'"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "jobserver クライアント (fds %d,%d)\n"
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr ""
-"警告: 副次 make で -jN を強制指定しました: jobserver モードを無効にします."
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "dup jobserver"
-
-#: main.c:1570
+#: main.c:1627
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
 "警告: jobserver が利用不可: 今回は -j1 を使います. 親 make ルールに `+' を追"
 "加しましょう."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr ""
+"警告: 副次 make で -jN を強制指定しました: jobserver モードを無効にします."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "標準入力からの makefile が二回指定されました."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (一時ファイル)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (一時ファイル)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "並列ジョブ (-j) はこのプラットフォームでサポートされません."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "単一ジョブ (-j1) モードにリセットします."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "jobserver のスロットは %d までです\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "ジョブサーバ セマフォを作成しています: (エラー %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "ジョブパイプ作成中"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "jobserver パイプの初期化"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "シンボリックリンクはサポートされていません: -L は無効です."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "makefile の更新中....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "makefile '%s' 自己再帰のおそれあり ― 再make しません.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "makefile '%s' の再makeに失敗しました."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "インクルードされる makefile '%s' が見つかりませんでした."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "makefile '%s' が見つかりませんでした"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "元のディレクトリに戻れませんでした."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "再実行します[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (一時ファイル): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL が二つ以上のターゲットを含んでいます"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "ターゲットが指定されておらず, makefile も見つかりません"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "ターゲットがありません"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "最終ターゲットを更新中....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr "警告:  時刻のずれを検出. 不完全なビルド結果になるかもしれません."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "使い方: %s [オプション] [ターゲット] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1268,7 +1214,7 @@ msgstr ""
 "\n"
 "このプログラムは %s 用にビルドされました\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1277,32 +1223,32 @@ msgstr ""
 "\n"
 "このプログラムは %s (%s) 用にビルドされました\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "バグレポートは <bug-make@gnu.org> まで.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "'%s%s' オプションは空でない文字列引数を要求します"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "'-%c' オプションは正の整数引数を要求します"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sこのプログラムは %s 用にビルドされました\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sこのプログラムは %s (%s) 用にビルドされました\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1315,7 +1261,7 @@ msgstr ""
 "%sこれはフリーソフトウェアです: 自由に変更および配布できます.\n"
 "%s法律の許す限り、 無保証 です.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1324,7 +1270,7 @@ msgstr ""
 "\n"
 "# Make データベース出力 %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1333,29 +1279,29 @@ msgstr ""
 "\n"
 "# Make データベース終了 %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "未知のエラー %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: ユーザ %lu (実効 %lu), グループ %lu (実効 %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "アクセス権限を初期化"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "ユーザアクセス"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "make アクセス"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "子プロセスアクセス"
 
@@ -1400,9 +1346,8 @@ msgid "%s[%u]: Leaving directory '%s'\n"
 msgstr "%s[%u]: ディレクトリ '%s' から出ます\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "書き込みエラー: %s"
+msgstr "書き込みエラー: 標準出力"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1418,226 +1363,261 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "ジョブパイプ作成中"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "ジョブパイプ複製中"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "jobserver パイプの初期化"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "内部エラー: 無効な --jobserver-auth 文字列 '%s'"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "jobserver クライアント (fds %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "jobserver パイプライン"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "ジョブサーバへの write"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "ジョブのパイプの pselect"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "ジョブのパイプの read"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "makefile を読み込みます...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "makefile '%s' の読み込み中"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (デフォルトの最終ターゲットがありません)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (探索パス)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (気にしなくてよい)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (~ の展開なし)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "makefile '%s' の中の UTF-8 BOM をスキップします\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "makefile バッファの中の UTF-8 BOM をスキップします\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "条件部の文法が無効です"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: 読み込みに失敗しました"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "最初のターゲットより前にレシピがあります"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "レシピの前のルールが不足しています"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (8 個の空白でしたが, TAB のつもりでしたか?)"
+msgstr "分離記号を欠いています (8 個の空白でしたが, TAB のつもりでしたか?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "分離記号を欠いています%s"
+msgstr "分離記号を欠いています"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "ターゲットパターンを欠いています"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "複数のターゲットパターンです"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "ターゲットパターンが '%%' を含んでいません"
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "'endif' が欠落しています"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "空の変数名"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "'define' 疑似命令の後ろに無関係な文字列があります"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "'endef' を欠いており, 'define' が終了していません"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "'endef' 疑似命令の後ろに無関係な文字列があります"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "'%s' 疑似命令の後ろに無関係な文字列があります"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "無関係な '%s'"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "一つの条件部につき一つしか 'else' を使えません"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "ターゲット特有の変数定義が異常です"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "必要条件をレシピ内で定義できません"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "暗黙ルールと静的パターンルールが混ざりました"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "暗黙ルールと通常ルールが混ざりました"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "ターゲット '%s' はターゲットパターンと一致しません"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "ターゲットファイル '%s' が : と :: 項目の両方を持っています"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "ターゲット '%s' が同一ルール内で複数回与えられました"
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "警告: ターゲット '%s' のためのレシピを置き換えます"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "警告: ターゲット '%s' のための古いレシピは無視されます"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "暗黙ルールと通常ルールが混ざりました"
+msgstr "*** 暗黙ルールと通常ルールが混ざりました: 推奨されない文法"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "警告: NUL 文字があります; 行の残りは無視されます"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "'%s' に対して行うべき事はありません."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "'%s' は更新済みです."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "ファイル '%s' の依存関係を整理しています.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr ""
 "%1$s'%3$s' に必要なターゲット '%2$s' を make するルールがありません%4$s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sターゲット '%s' を make するルールがありません%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "ファイル '%s' を検討しています.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "最近ファイル '%s' の更新を試して失敗しています.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "ファイル '%s' は検討済みです.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "ファイル '%s' の更新をしています.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "ファイル '%s' の更新が終了しました.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "ファイル '%s' が存在しません.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1645,137 +1625,137 @@ msgstr ""
 "*** 警告: .LOW_RESOLUTION_TIME ファイル '%s' が高解像度タイムスタンプを持って"
 "います"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "'%s' のための暗黙ルールを見つけました.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "'%s' のための暗黙ルールがありません.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "'%s' 用のデフォルトレシピを使用します.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "循環 %s <- %s 依存関係が破棄されました."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "ターゲットファイル '%s' の必要条件を満たしました.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "'%s' の必要条件を make します.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "ターゲットファイル '%s' を諦めます.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "ターゲット '%s' はエラーにより 再make できませんでした."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "必要条件 '%s' はターゲット '%s' の order-only(順序決定条件)です.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "ターゲット '%2$s' の必要条件 '%1$s' が存在しません.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "必要条件 '%s' はターゲット '%s' よりも新しい.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "必要条件 '%s' はターゲット '%s' よりも古い.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "ターゲット '%s' はダブルコロンで, かつ必要条件を持たない.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "'%s' のためのレシピが無く, 必要条件は実際には変更されませんでした.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "always-make フラグが立っているので '%s' を make します.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "ターゲット '%s' を再make する必要はありません"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; VPATH 名 '%s' を使用します"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "ターゲット '%s' を再make する必要があります.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  VPATH 名 '%s' を無視します.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "'%s' のレシピを実行中です.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "ターゲットファイル '%s' の再make に失敗しました.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "ターゲットファイル '%s' の再 make に成功しました.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "ターゲットファイル '%s' は -q オプションを付けての再make が必要です.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "'%s' のためのデフォルトのコマンドを使います.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "警告: ファイル '%s' の修正時刻は未来のものです"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "警告: ファイル '%s' の修正時刻 %s は未来の時刻です"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ".LIBPATTERNS 要素 '%s' がパターンではありません"
@@ -1785,7 +1765,7 @@ msgstr ".LIBPATTERNS 要素 '%s' がパターンではありません"
 msgid "Customs won't export: %s\n"
 msgstr "Customs がエクスポートしてくれません: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1793,7 +1773,7 @@ msgstr ""
 "\n"
 "# 暗黙ルール"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1801,7 +1781,7 @@ msgstr ""
 "\n"
 "# 暗黙ルールなし."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1810,11 +1790,11 @@ msgstr ""
 "\n"
 "# %u 個の暗黙ルール, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " 以上."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "バグ: num_pattern_rules が間違っている!  %u != %u"
@@ -1975,7 +1955,7 @@ msgstr "情報要求"
 msgid "Floating point co-processor not available"
 msgstr "浮動小数点コプロセッサが利用不能"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -1984,7 +1964,7 @@ msgstr ""
 "\n"
 "%s strcache バッファはありません\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -1995,7 +1975,7 @@ msgstr ""
 "%s strcache バッファ: %lu (%lu) / 文字列 = %lu / 格納 = %lu B / 平均 = %lu "
 "B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
@@ -2003,19 +1983,19 @@ msgstr ""
 "%s 現在のバッファ: サイズ = %hu B / 使用中 = %hu B / 個数 = %hu / 平均 = %hu "
 "B\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s その他 使用中: 合計 = %lu B / 個数 = %lu / 平均 = %lu B\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 "%s その他 未使用: 合計 = %lu B / 最大 = %lu B / 最小 = %lu B / 平均 = %hu B\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2024,7 +2004,7 @@ msgstr ""
 "\n"
 "%s strcache の稼働: 探索 = %lu / ヒット率 = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2032,44 +2012,44 @@ msgstr ""
 "# ハッシュテーブルの状態:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "自動変数"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "デフォルト"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "環境変数"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile 変数"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "-e オプションで指定した環境変数"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "コマンドライン変数"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "'override' 疑似命令"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (ファイル '%s', %lu 行目)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# 変数セットのハッシュテーブルの状態:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2077,7 +2057,7 @@ msgstr ""
 "\n"
 "# 変数\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2085,7 +2065,7 @@ msgstr ""
 "\n"
 "# パターン指定 変数 値"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2093,7 +2073,7 @@ msgstr ""
 "\n"
 "# パターン指定変数の値なし."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2112,88 +2092,38 @@ msgstr "警告: 未定義の変数 '%.*s'"
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() が %d で失敗しました\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "警告: 空のリダイレクト\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "内部エラー: '%s' command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 "-警告, DCL からの CTRL-Y 操作を再び有効にする必要があるかも知れません.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "ビルトイン [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "ビルトイン CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "ビルトイン CD %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "不明なビルトインコマンド '%s'\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "エラー, 空のコマンド\n"
-
-#: vmsjobs.c:674
+#: vmsjobs.c:1228
 #, c-format
-msgid "Redirected input from %s\n"
-msgstr "%s から入力リダイレクトされました\n"
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "%s へエラーリダイレクトされました\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "出力を %s へ追加\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "%s へ出力リダイレクトされました\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "追加 %.*s と後片付け\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "代わりに %s を実行します\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "spawn のエラー, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2201,11 +2131,11 @@ msgstr ""
 "\n"
 "# VPATH 探索パス\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# 'vpath' 探索パスはありません."
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2214,7 +2144,7 @@ msgstr ""
 "\n"
 "# %u つの 'vpath' 探索パス.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2222,7 +2152,7 @@ msgstr ""
 "\n"
 "# 一般の ('VPATH' 変数) 探索パスなし."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2232,6 +2162,83 @@ msgstr ""
 "# 一般の ('VPATH' 変数) 探索パス:\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "jobserver のスロットは %d までです\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "ジョブサーバ セマフォを作成しています: (エラー %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr "内部エラー: ジョブサーバ セマフォを開けません '%s': (エラー %ld: %s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "jobserver クライアント (セマフォ %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "ジョブサーバのセマフォを解放します: (エラー %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "セマフォ または 子プロセスを待っています: (エラー %ld: %s)"
+
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s: ターゲット '%s' のレシピで失敗しました"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] エラー 0x%x%s"
+
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
+#~ msgid "dup jobserver"
+#~ msgstr "dup jobserver"
+
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "警告: 空のリダイレクト\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "内部エラー: '%s' command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "ビルトイン [%s][%s]\n"
+
+#~ msgid "BUILTIN ECHO %s->%s\n"
+#~ msgstr "ビルトイン ECHO %s->%s\n"
+
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "不明なビルトインコマンド '%s'\n"
+
+#~ msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+#~ msgstr ""
+#~ ".ONESHELL の中で未知、またはサポートされていないビルトインコマンド: '%s'\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "エラー, 空のコマンド\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "%s から入力リダイレクトされました\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "%s へエラーリダイレクトされました\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "%s へ出力リダイレクトされました\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "spawn のエラー, %d\n"
+
 #~ msgid "internal error: multiple --sync-mutex options"
 #~ msgstr "内部エラー: 複数の --sync-mutex オプション"
 
index 420b249..21382da 100644 (file)
Binary files a/po/ko.gmo and b/po/ko.gmo differ
index 709bcb1..c6c2cef 100644 (file)
--- a/po/ko.po
+++ b/po/ko.po
@@ -3,7 +3,7 @@
 # This file is distributed under the same license as the make package.
 #
 # Bang Jun-Young <bangjy@nownuri.net>, 1996.
-# Changwoo Ryu <cwryu@debian.org>, 2001, 2006, 2013.
+# Changwoo Ryu <cwryu@debian.org>, 2001, 2006, 2013-2014, 2016.
 #
 # 용어
 # - recipe - 명령 (make의 action으로 실행할 명령어를 말함)
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU make 4.0\n"
+"Project-Id-Version: GNU make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-12-01 18:10+0900\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-30 16:50+0900\n"
 "Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
-"Language-Team: Korean <translation-team-ko@lists.sourceforge.net>\n"
+"Language-Team: Korean <translation-team-ko@googlegroups.com>\n"
 "Language: ko\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -55,84 +55,84 @@ msgstr "touch: '%s' 멤버가 '%s' 안에 없습니다"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: '%s'에 대하여 ar_member_touch에서 실패 리턴 코드"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr "lbr$set_module()이 모듈정보를 추출하는 데 실패, 상태 = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control()이 실패, 상태 = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "'%2$s' 멤버를 참조하려고 '%1$s' 라이브러리를 열 수 없습니다"
+msgstr "멤버 상태 %2$d번을 참조하려고 '%1$s' 라이브러리를 열 수 없습니다"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "멤버 '%s'%s: %ld바이트, 위치 %ld (%ld).\n"
 
 # 이미 잘려진 이름을 표시하면서 이름이 잘려졌을 수도 있으니 유의하라는 뜻
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (이름이 잘려나갔을 수도 있습니다)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  날짜 %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, 모드 = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "명령어에 줄이 너무 많습니다(%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** 중지.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] 아카이브 '%s' 멤버는 가짜일 수 있으므로 삭제하지 않습니다"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** 아카이브 '%s' 멤버는 가짜일 수 있으므로 삭제하지 않습니다"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] '%s' 파일을 삭제합니다"
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** '%s' 파일을 삭제합니다"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  실행할 명령어"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (내장):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " ('%s'에서, %lu번째 줄):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -140,64 +140,64 @@ msgstr ""
 "\n"
 "# 디렉터리\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: stat을 할 수 없었습니다.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (키 %s, 변경시각 %d): 열 수 없습니다.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (장치 %d, 아이노드 [%d,%d,%d]): 열 수 없습니다.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (장치 %ld, 아이노드 %ld): 열 수 없습니다.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (키 %s, 변경시각 %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (장치 %d, 아이노드 [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (장치 %ld, 아이노드 %ld): "
 
 # 여기서 No는 "No files"라고 쓰인다.  궁극적으로 msgid가 고쳐져야 함
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "0개"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " 파일, "
 
 # 여기서 no는 "no impossibilities"라고 쓰인다.  궁극적으로 msgid가 고쳐져야 함
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "0개"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " 불가능"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " 지금까지."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " 디렉토리 %lu개에서 불가능.\n"
@@ -207,154 +207,154 @@ msgstr " 디렉토리 %lu개에서 불가능.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "재귀하는 '%s' 변수는 (결국) 자기 자신을 참조하고 있습니다"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "변수 참조에 끝마침이 없습니다"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "파일 '%s'의 %s:%lu에서 명령을 지정했습니다."
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr "파일 '%s'에 대한 명령을 묵시적 규칙 탐색으로 찾았습니다."
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "하지만 '%s' 파일은 이제 '%s'과(와) 같은 파일로 간주합니다."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "'%s'에 대한 명령은 '%s'에 대한 명령이 우선하므로 무시합니다."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "단일 콜론 '%s'을(를) 이중 콜론 '%s'(으)로 이름을 바꿀 수 없습니다"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "이중 콜론 '%s'을(를) 단일 콜론 '%s'(으)로 이름을 바꿀 수 없습니다"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** 중간 파일 '%s'을(를) 삭제합니다"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "중간 파일을 제거합니다...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "현재 시각"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: 타임스탬프가 범위를 벗어나므로, %s을(를) 대체합니다"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# 타겟이 아님:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  프레시어스 파일 (.PRECIOUS의 선행조건)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  포니 타겟 (.PHONY의 선행조건)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  명령행 타겟."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr ""
 "#  기본 메이크파일, MAKEFILES 메이크파일, 또는 -include/sinclude 메이크파일."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "#  내장 규칙"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  묵시적 규칙 탐색이 완료되었습니다."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  묵시적 규칙 탐색이 완료되지 않았습니다."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  묵시적/고정 패턴 스템: '%s'\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  파일이 중간단계의 선행조건입니다."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  다음도 만듭니다:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  변경 시각이 결코 검사되지 않았음."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  파일이 없습니다."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  파일이 매우 오래되었습니다."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  마지막 변경 %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  파일을 업데이트했습니다."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  파일을 업데이트하지 않았습니다."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  현재 실행중인 명령(이것은 버그입니다)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  현재 실행중인 의존성(이것은 버그입니다)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  성공적으로 업데이트."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  업데이트 필요(-q 설정됨)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  업데이트 실패."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  'command_status' 멤버에 값이 잘못되었습니다!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -362,7 +362,7 @@ msgstr ""
 "\n"
 "# 파일"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -372,105 +372,122 @@ msgstr ""
 "# 파일 해시 테이블 통계:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: '%s' 필드가 캐시에 없음: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "'word' 함수의 첫번째 인자가 숫자가 아닙니다"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "'word' 함수의 첫번째 인자는 0보다 커야 합니다"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "'wordlist' 함수의 첫번째 인자가 숫자가 아닙니다"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "'wordlist' 함수의 두번째 인자가 숫자가 아닙니다"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(In) 실패(e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(Err) 실패(e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() 실패(e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() 실패\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "임시 배치 파일 %s을(를) 지웁니다\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "file: 파일 이름이 없습니다"
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "open: %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "write: %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
+#, c-format
+msgid "close: %s: %s"
+msgstr "close: %s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "file: 인자가 너무 많습니다"
+
+#: function.c:2262
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr "올바르지 않은 파일 동작: %s"
+msgid "read: %s: %s"
+msgstr "read: %s: %s"
 
-#: function.c:2324
+#: function.c:2275
+#, c-format
+msgid "file: invalid file operation: %s"
+msgstr "file: 올바르지 않은 파일 동작: %s"
+
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
-msgstr "함수 '%2$s'에 인자 갯수(%1$d)가 부족합니다 "
+msgstr "함수 '%2$s'에 인자 갯수(%1$d)가 부족합니다"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "이 플랫폼에서는 구현되지 않았습니다: '%s' 함수"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "함수 '%s'에 대해 종료되지 않은 호출: '%c' 문자가 빠졌음"
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "빈 함수 이름: %s\n"
+msgstr "빈 함수 이름"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "잘못된 함수 이름: %s\n"
+msgstr "잘못된 함수 이름: %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "함수 이름이 너무 깁니다: %s\n"
+msgstr "함수 이름이 너무 깁니다: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "함수 `%2$s'에 최소 인자 갯수(%1$d)가 잘못되었습니다\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "함수 `%2$s'에 최소 인자 갯수(%1$d)가 잘못되었습니다"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "함수 `%2$s'에 최대 인자 갯수(%1$d)가 잘못되었습니다\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "함수 `%2$s'에 최대 인자 갯수(%1$d)가 잘못되었습니다"
 
 #: getopt.c:659
 #, c-format
@@ -567,7 +584,7 @@ msgstr "'%s'에 대한 묵시적 규칙을 찾고 있습니다.\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "'%s'에 대한 아카이브멤버 묵시적 규칙을 찾고 있습니다.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "묵시적 규칙의 재귀를 피함.\n"
 
@@ -615,101 +632,76 @@ msgstr "VPATH '%2$s'에서 선행조건 '%1$s'을(를) 찾았습니다\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "중간 파일 '%s'에 대한 묵시적 규칙을 찾고 있습니다.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "임시 파일을 만들 수 없습니다\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (메모리 덤프됨)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (무시됨)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<내장>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: '%s' 타겟에 대한 명령이 실패했습니다"
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "%s[%s] 오류 %d%s"
-
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] 오류 0x%x%s"
-
-#: job.c:529
+#: job.c:510
 #, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] 오류 %d%s"
 
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** 끝나지 않은 작업을 기다리고 있습니다...."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "살아있는 하위 프로세스 %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (원격)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "실패한 하위 프로세스 %p PID %s %s을(를) 거둬들입니다\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "성공한 하위 프로세스 %p PID %s %s을(를) 거둬들입니다\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "임시 배치 파일 %s을(를) 지웁니다\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "임시 배치 파일 %s 지우기가 실패했습니다(%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "하위 프로세스 %p PID %s%s을(를) 체인에서 지웁니다.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "작업 서버 세마포어 해제: (오류 %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "하위 프로세스 %p(%s)에 토큰을 내어 줍니다.\n"
 
-# ??? 디버깅 메세지
-#: job.c:1036
-msgid "write jobserver"
-msgstr "작업서버 쓰기"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy()가 프로세스를 시작하는 데 실패했습니다(e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -718,98 +710,94 @@ msgstr ""
 "\n"
 "실행 실패에서 인수 %d개\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "하위 프로세스 %p(%s) PID %s%s을(를) 체인에 넣습니다.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "세마포어 또는 하위 프로세스 대기: (오류 %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "하위 프로세스 %p(%s)에서 토큰을 받았습니다.\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "작업 파이프 읽기"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: '%s' 타겟이 없습니다"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: '%s' 타겟 업데이트, 이유: %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "이 운영 체제에서는 부하 제한을 강제할 수 없습니다"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "부하 제한을 강제할 수 없습니다: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "파일 핸들이 없음: 표준 입력을 복사할 수 없습니다\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "파일 핸들이 없음: 표준 출력을 복사할 수 없습니다\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "파일 핸들이 없음: 표준 오류를 복사할 수 없습니다\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "표준 입력을 복구할 수 없습니다\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "표준 출력을 복구할 수 없습니다\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "표준 오류를 복구할 수 없습니다\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr ""
 "하위 프로세스 PID %s을(를) 거둬들이고, 아직 PID %s을(를) 기다리고 있습니다\n"
 
-#: job.c:2458
+#: job.c:2275
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: 명령을 찾지 못했음"
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: 명령을 찾지 못했습니다\n"
 
-#: job.c:2518
+#: job.c:2277
+#, c-format
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: 명령을 찾지 못했습니다\n"
+
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
-msgstr "%s: ì\85¸ í\94\84ë¡\9cê·¸ë\9e¨ì\9d\84 ì°¾ì§\80 ëª»í\96\88ì\9d\8c"
+msgstr "%s: ì\85¸ í\94\84ë¡\9cê·¸ë\9e¨ì\9d\84 ì°¾ì§\80 ëª»í\96\88ì\8aµë\8b\88ë\8b¤"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: 환경 변수 공간이 바닥났을 수 있습니다"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL이 바뀌었습니다(과거 '%s', 현재 '%s')\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "임시 배치 파일 %s을(를) 만듭니다\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -817,7 +805,7 @@ msgstr ""
 "배치 파일 내용:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -827,7 +815,7 @@ msgstr ""
 "\t%s\n"
 
 # ???  디버깅 메세지
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (%d번째 줄) 잘못된 쉘 컨텍스트 (!unixy && !batch_mode_shell)\n"
@@ -856,28 +844,28 @@ msgstr "%s 심볼을 %s에서 읽어들이는데 실패: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "읽어들일 심볼 이름이 비었음: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "%s 심볼을 %s에서 읽어들임\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "'load' 작업은 이 플랫폼에서 지원되지 않습니다."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "옵션:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      무시됩니다, 호환을 위해 유지.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make           조건에 관계 없이 모든 타겟을 만듭니다.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -885,17 +873,17 @@ msgstr ""
 "  -C <디렉터리>, --directory=<디렉터리>\n"
 "                              뭔가 하기 전에 <디렉터리>로 이동합니다.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          여러 가지 디버깅 정보를 출력합니다.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=플래그]            여러 가지 종류의 디버깅 정보를 출력합니다.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -903,13 +891,13 @@ msgstr ""
 "  -e, --environment-overrides\n"
 "                              환경변수가 메이크파일 내용에 우선합니다.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "  --eval=<문자열>             <문자열>을 메이크파일 내용으로 해석합니다.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -917,15 +905,15 @@ msgstr ""
 "  -f <파일>, --file=<파일>, --makefile=<파일>\n"
 "                              <파일>을 메이크파일로 읽습니다.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  이 메시지를 출력하고 끝냅니다.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr "  -i, --ignore-errors         명령에서 발생하는 오류를 무시합니다.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -933,7 +921,7 @@ msgstr ""
 "  -I <디렉터리>, --include-dir=<디렉터리>\n"
 "                              포함할 메이크파일을 <디렉터리>에서 찾습니다.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -941,13 +929,13 @@ msgstr ""
 "  -j [N], --jobs[=N]          동시에 N개의 작업 허용, 인자 없으면 무한대로 허"
 "용.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            일부 타겟을 만들 수 없더라도 계속 진행합니다.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -957,7 +945,7 @@ msgstr ""
 "                              로드가 N 아래로 내려가야 동시 작업 시작합니"
 "다.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -965,7 +953,7 @@ msgstr ""
 "  -L, --check-symlink-times   심볼릭 링크와 실제 중 더 최근 수정 시각을\n"
 "                               사용합니다.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -975,7 +963,7 @@ msgstr ""
 "                              실제로는 아무 명령도 실행하지 않고 표시만 합니"
 "다.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -986,7 +974,7 @@ msgstr ""
 "지\n"
 "                              않습니다.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -994,11 +982,11 @@ msgstr ""
 "  -O[방식], --output-sync[=방식]\n"
 "                              병렬 작업의 출력을 <방식>에 따라 맞춥니다.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       make의 내부 데이터베이스를 출력합니다.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1006,19 +994,19 @@ msgstr ""
 "  -q, --question              명령을 실행하지 않음. 종료 상태로 업데이트\n"
 "                              여부를 알 수 있습니다.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr "  -r, --no-builtin-rules      내장 묵시적 규칙을 사용하지 않습니다.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr "  -R, --no-builtin-variables  내장 변수를 지정하지 못하게 합니다.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       명령어를 출력하지 않습니다.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1026,31 +1014,31 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              -k 옵션을 끕니다.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 타겟을 다시 만들지 않고 touch만 합니다.\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                     추적 정보를 표시합니다.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr "  -v, --version               make의 버전 번호를 출력하고 끝냅니다.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       현재 디렉터리를 출력합니다.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
 msgstr "  --no-print-directory        묵시적으로 켜져 있더라도 -w를 끕니다.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1059,33 +1047,33 @@ msgstr ""
 "                              <파일>을 무한히 계속 새로운 것으로 취급합니"
 "다.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
 msgstr ""
 "  --warn-undefined-variables  정의되지 않은 변수를 참조할 때 경고를 냅니다.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "빈 문자열은 파일 이름으로 부적절합니다"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "디버깅 단계 지정 '%s'이(가) 잘못되었습니다"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "알 수 없는 output-sync 방식 '%s'"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: 인터럽트/예외가 발견되었습니다(코드 = 0x%lx, 주소 = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1100,179 +1088,135 @@ msgstr ""
 "예외플래그 = %lx\n"
 "예외주소 = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "접근 권한 위반: 주소 0x%p에 쓰기\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "접근 권한 위반: 주소 0x%p에서 읽기\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() 설정 default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "find_and_set_shell() 경로 탐색 설정 default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s이(가) 30초동안 일시 중지됩니다..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "완료 sleep(30). 계속.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr "내부 오류: 작업 서버 세마포어('%s')를 열 수 없습니다: (오류 %ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "작업 서버 클라이언트(세마포어 %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "내부 오류: 잘못된 --jobserver-fds 문자열 '%s'"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "작업 서버 클라이언트(파일 디스크립터 %d,%d)\n"
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr "경고: 파생된 메이크에서 -jN이 강제되었습니다: 작업서버 모드를 끕니다."
-
-# ???  디버깅 메세지
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "dup 작업서버"
-
-#: main.c:1570
+#: main.c:1627
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
 "경고: 작업서버를 사용할 수 없습니다: -j1을 사용합니다.  상위 메이크 규칙에 "
 "'+'를 추가합니다."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr "경고: 파생된 메이크에서 -jN이 강제되었습니다: 작업서버 모드를 끕니다."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "표준입력에서 받아들이는 메이크파일이 두 번 이상 지정되었습니다."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen(임시 파일)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite(임시 파일)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "병렬 작업(-j)은 이 플랫폼에서 지원하지 않습니다."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "단일 작업 (-j1) 모드로 돌아갑니다."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "작업서버 슬롯은 %d개로 제한됩니다\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "작업서버 세마포어 만들기: (오류 %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "작업 파이프 생성"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "작업서버 파이프 초기화"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "심볼릭 링크를 지원하지 않습니다: -L 옵션을 끕니다."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "메이크파일을 업데이트하고 있습니다....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "메이크파일 '%s'은(는) 반복할 수 있으므로, 다시 만들지 않습니다.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "'%s' 메이크파일을 다시 만드는데 실패."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "포함된 메이크파일 '%s'을(를) 찾지 못했습니다."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "메이크파일 '%s'을(를) 찾지 못했습니다"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "원래 디렉터리로 돌아갈 수 없습니다."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "재실행[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (임시 파일): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL 안에 타겟이 여러 개 들어 있습니다"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "타겟이 지정되지 않았고 메이크파일이 없습니다"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "타겟 없음"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "최종 타겟을 갱신합니다....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "경고:  시계가 잘못되었음이 발견되었습니다.  빌드가 불완전할 수 있습니다."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "사용법: %s [옵션] [타겟] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1281,7 +1225,7 @@ msgstr ""
 "\n"
 "이 프로그램은 %s에서 사용하도록 빌드되었습니다\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1290,32 +1234,32 @@ msgstr ""
 "\n"
 "이 프로그램은 %s(%s)에서 사용하도록 빌드되었습니다\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "문제점을 <bug-make@gnu.org>로 알려 주십시오.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "'%s%s' 옵션은 비어 있지 않은 문자열 인수가 필요합니다"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "'-%c' 옵션은 0보다 큰 정수 인수가 필요합니다"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%s%s 빌드\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%s%s(%s) 빌드\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1328,7 +1272,7 @@ msgstr ""
 "%sThis is free software: you are free to change and redistribute it.\n"
 "%sThere is NO WARRANTY, to the extent permitted by law.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1337,7 +1281,7 @@ msgstr ""
 "\n"
 "# 메이크 데이터베이스, %s에 표시"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1346,29 +1290,29 @@ msgstr ""
 "\n"
 "# 메이크 데이터베이스 마침, %s에서\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "알 수 없는 오류 %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: 사용자 %lu (실제 %lu), 그룹 %lu (실제 %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "접근 권한 초기화"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "사용자 접근"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "메이크 접근"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "하위 접근"
 
@@ -1413,9 +1357,8 @@ msgid "%s[%u]: Leaving directory '%s'\n"
 msgstr "%s[%u]: 디렉터리 '%s' 나감\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "쓰기 오류: %s"
+msgstr "쓰기 오류: 표준 출력"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1431,226 +1374,263 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "작업 파이프 생성"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "작업 파이프 dup() 수행"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "작업서버 파이프 초기화"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "내부 오류: 잘못된 --jobserver-auth 문자열 '%s'"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "작업 서버 클라이언트(파일 디스크립터 %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "작업서버 파이프라인"
+
+# ??? 디버깅 메세지
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "작업서버 쓰기"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "pselect 작업 파이프"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "작업 파이프 읽기"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "메이크파일을 읽고 있습니다...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "'%s' 메이크파일을 읽고 있습니다"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (최종 타겟이 없음)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (탐색 경로)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (상관 안함)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (~ 확장 없음)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "메이크파일 '%s'에서 UTF-8 BOM 무시\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "메이크파일 버퍼에서 UTF-8 BOM 무시\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "조건문에 부적절한 문법이 쓰임"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: 읽어들이는데 실패"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "첫번째 타겟보다 앞에서 명령어가 시작되었습니다"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "명령 앞에 규칙이 빠졌음"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (8개의 공백 말고 탭을 쓰려고 한 것 아니었습니까?)"
+msgstr ""
+"분리 기호가 없습니다 (빈 칸 8개가 아니라 탭을 쓰려고 한 것 아니었습니까?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "분리기호 %s이(가) 빠졌음"
+msgstr "분리 기호가 빠졌음"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "타겟 패턴이 빠졌음"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "다중 타겟 패턴"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "타겟 패턴에 '%%'가 없습니다."
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "'endif'가 빠졌음"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "빈 변수 이름"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "'define' 지시자 뒤에 필요 없는 텍스트 있음"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "'endef'가 빠졌음. 'define'을 마치지 않았습니다"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "'endef' 지시자 뒤에 필요 없는 텍스트가 있음"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "'%s' 지시자 뒤에 필요 없는 텍스트가 있음"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "필요 없는 '%s'"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "한 개의 조건에는 한 개의 'else'만 있어야 합니다"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "타겟별 변수 정의 형식이 틀렸습니다"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "명령어에서 선행조건을 정의할 수 없습니다"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "묵시적 패턴 룰과 고정된 패턴룰이 섞였습니다"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "혼합된 묵시적 규칙과 일반적 규칙"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "타겟 '%s'은(는) 타겟 패턴에 맞지 않습니다"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "타겟 파일 '%s'은(는) :와 :: 항목을 동시에 갖고 있습니다"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "타겟 '%s'이(가) 같은 규칙에서 여러 번 주어졌습니다"
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "경고: 타겟 '%s'에 대한 명령보다 우선합니다"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "경고: 타겟 '%s'에 대한 과거 명령을 무시합니다"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "혼합된 묵시적 규칙과 일반적 규칙"
+msgstr "*** 혼합된 묵시적 규칙과 일반적 규칙: 추천하지 않는 문법입니다"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
-msgstr "경고: NUL 문자가 발견되었습니다; 줄의 나머지는 무시됩니다"
+msgstr "경고: NUL 문자가 발견되었습니다. 줄의 나머지는 무시됩니다"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "'%s'을(를) 위해 할 일이 없습니다."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "'%s'은(는) 이미 업데이트되었습니다."
 
 # prune이 truncate의 의미인가 지운다는 의미인가??
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "'%s' 파일을 잘라냅니다.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%1$s'%3$s'에서 필요한 '%2$s' 타겟을 만들 규칙이 없습니다%4$s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%s타겟 '%s'을(를) 만들 규칙이 없습니다%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "'%s' 타겟 파일을 고려합니다.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "최근에 '%s' 파일 업데이트를 시도해 실패했습니다.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "'%s' 파일은 이미 검토했습니다.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "아직 '%s' 파일을 업데이트하고 있습니다.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "'%s' 파일의 업데이트를 마쳤습니다.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "'%s' 파일이 없습니다.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1658,137 +1638,137 @@ msgstr ""
 "*** Warning: .LOW_RESOLUTION_TIME 파일 '%s'에 고해상도 타임 스탬프가 들어 있"
 "습니다"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "'%s'에 대한 묵시적 규칙을 찾았습니다.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "'%s'에 대한 묵시적 규칙이 없습니다.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "'%s'에 대해 기본 명령 사용.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "%s <- %s 상호 의존성은 무시됩니다."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "타겟 파일 '%s'의 선행조건을 마쳤습니다.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "'%s'의 선행조건이 만들어지고 있습니다.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "타겟 파일 '%s'을(를) 포기합니다.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "오류로 '%s' 타겟을 다시 만들지 못했습니다."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "'%s' 선행 조건은 '%s' 타겟에 대해 순서만 선행 조건입니다.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "타겟 '%2$s'의 선행조건 %1$s이(가) 없습니다.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "'%s' 선행 조건이 '%s' 타겟보다 나중에 만들어졌습니다.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "'%s' 선행 조건이 '%s' 타겟보다 먼저 만들어졌습니다.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "'%s' 타겟은 콜론 두 개가 붙었고 선행조건이 없습니다.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "'%s'에 대한 명령어가 없고 어떤 선행조건도 실제로 바뀌지 않았습니다.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "always-make 옵션 때문에 '%s' 타겟을 만듭니다.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "'%s' 타겟을 다시 만들 필요가 없습니다"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; VPATH 이름 '%s'을(를) 사용합니다"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "'%s' 타겟을 다시 만들어야 합니다.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  VPATH 이름 '%s'을(를) 무시합니다.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "'%s'의 명령이 실행 중입니다.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "'%s' 타겟 파일을 다시 만드는데 실패했습니다.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "'%s' 타겟 파일을 성공적으로 다시 만들었습니다.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "'%s' 타겟 파일을 -q 옵션으로 다시 만들어야 합니다.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "'%s'에 대해 기본 명령을 사용.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "경고: '%s' 파일의 변경 시각이 미래입니다"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "경고: '%s' 파일의 변경 시각(%s)이 미래입니다"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ".LIBPATTERNS의 원소 '%s'이(가) 패턴이 아닙니다"
@@ -1799,7 +1779,7 @@ msgstr ".LIBPATTERNS의 원소 '%s'이(가) 패턴이 아닙니다"
 msgid "Customs won't export: %s\n"
 msgstr "Customs은 export되지 않습니다: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1807,7 +1787,7 @@ msgstr ""
 "\n"
 "# 묵시적 규칙"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1815,7 +1795,7 @@ msgstr ""
 "\n"
 "# 묵시적 규칙 없음."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1824,11 +1804,11 @@ msgstr ""
 "\n"
 "# 묵시적 규칙 %u개, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " 터미널."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "버그: num_pattern_rules 틀렸습니다!  %u != %u"
@@ -1989,7 +1969,7 @@ msgstr "정보 요청"
 msgid "Floating point co-processor not available"
 msgstr "부동소수점 연산 보조프로세서가 없습니다"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -1998,7 +1978,7 @@ msgstr ""
 "\n"
 "%s strcache 버퍼 없음\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2009,26 +1989,26 @@ msgstr ""
 "%s strcache 버퍼: %lu (%lu) / 문자열 = %lu / 저장 공간 = %lu B / 평균 = %lu "
 "B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 "%s 현재 버퍼: 크기 = %hu B / 사용 = %hu B / 개수 = %hu / 평균 = %hu B\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s 기타 사용: 전체 = %lu B / 개수 = %lu / 평균 = %lu B\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 "%s 기타 빈 공간: 전체 = %lu B / 최대 = %lu B / 최소 = %lu B / 평균 = %hu B\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2037,7 +2017,7 @@ msgstr ""
 "\n"
 "%s strcache 효율: 검색 = %lu / 히트 비율 = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2045,44 +2025,44 @@ msgstr ""
 "# 해시 테이블 통계:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "자동"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "기본값"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "환경"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "메이크파일"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "-e 하의 환경"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "명령행"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "'override' 지시자"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " ('%s'에서, %lu번째 줄)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# 변수 모음 해시 테이블 통계:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2090,7 +2070,7 @@ msgstr ""
 "\n"
 "# 변수\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2098,7 +2078,7 @@ msgstr ""
 "\n"
 "# 패턴을 위한 변수 값"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2106,7 +2086,7 @@ msgstr ""
 "\n"
 "# 패턴을 위한 변수 값이 없습니다."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2125,88 +2105,38 @@ msgstr "경고: 정의되지 않은 변수 '%.*s'"
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search()가 %d번을 리턴하며 실패했습니다\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "경고: 비어 있는 리다이렉션\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "내부 오류: '%s' command_state"
-
 # DCL - Digital Command Language, VMS에서만 존재하는 shell language의 일종
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr "-경고, DCL에서 CTRL-Y를 다시 사용가능하도록 해야 할 것입니다.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "내장 [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "내장 CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "내장 CD %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "알 수 없는 내장 명령어 '%s'\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
+#: vmsjobs.c:1228
 #, c-format
-msgid "Error, empty command\n"
-msgstr "오류, 빈 명령어\n"
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "입력을 %s에서 리다이렉트합니다\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "오류를 %s(으)로 리다이렉트합니다\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "출력을 %s에 붙입니다\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "출력을 %s(으)로 돌립니다\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "%.*s을(를) 붙이고 지웁니다\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "대신 %s을(를) 실행\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "실행 오류, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2214,11 +2144,11 @@ msgstr ""
 "\n"
 "# VPATH 탐색 경로\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# 'vpath' 탐색 경로가 없음."
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2227,7 +2157,7 @@ msgstr ""
 "\n"
 "# 'vpath' 탐색 경로 %u개.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2235,7 +2165,7 @@ msgstr ""
 "\n"
 "# 일반적인 ('VPATH' 변수) 탐색 경로가 없음."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2245,17 +2175,33 @@ msgstr ""
 "# 일반적인 ('VPATH' 변수) 탐색 경로:\n"
 "# "
 
-#~ msgid "internal error: multiple --sync-mutex options"
-#~ msgstr "내부 오류: 여러 개의 --sync-mutex 옵션"
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "작업서버 슬롯은 %d개로 제한됩니다\n"
 
-#~ msgid "internal error: multiple --jobserver-fds options"
-#~ msgstr "내부 오류: 여러 개의 -jobserver-fds 옵션"
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "작업서버 세마포어 만들기: (오류 %ld: %s)"
 
-#~ msgid "virtual memory exhausted"
-#~ msgstr "가상 메모리가 고갈됨"
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr "내부 오류: 작업 서버 세마포어('%s')를 열 수 없습니다: (오류 %ld: %s)"
 
-#~ msgid "write error"
-#~ msgstr "쓰기 오류"
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "작업 서버 클라이언트(세마포어 %s)\n"
 
-#~ msgid "BUILTIN RM %s\n"
-#~ msgstr "내장 RM %s\n"
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "작업 서버 세마포어 해제: (오류 %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "세마포어 또는 하위 프로세스 대기: (오류 %ld: %s)"
index 5277a0e..6e95c2f 100644 (file)
Binary files a/po/lt.gmo and b/po/lt.gmo differ
index e9fa7d2..eb99613 100644 (file)
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: make-3.81\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
 "PO-Revision-Date: 2008-05-17 21:42+0300\n"
 "Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
@@ -48,84 +48,84 @@ msgstr "touch: Archyvas „%s“ neegzistuoja"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr ""
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr ""
 
-#: arscan.c:255
+#: arscan.c:261
 #, fuzzy, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr "nepavyko atverti bibliotekos „%s“ bandant surasti narį „%s“"
 
-#: arscan.c:944
+#: arscan.c:965
 #, fuzzy, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Narys „%s“%s: %ld baitų pozicijoje %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (pavadinimas gali būti sutrumpintas)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Data %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, mode = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr ""
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr ""
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr ""
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr ""
 
-#: commands.c:647
+#: commands.c:645
 #, fuzzy, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Trinamas failas „%s“"
 
-#: commands.c:649
+#: commands.c:647
 #, fuzzy, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Trinamas failas „%s“"
 
-#: commands.c:685
+#: commands.c:683
 #, fuzzy
 msgid "#  recipe to execute"
 msgstr "#  vykdytinos komandos"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr "  (integruota)"
 
-#: commands.c:690
+#: commands.c:688
 #, fuzzy, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (nuo „%s“, %lu eilutė):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -133,62 +133,62 @@ msgstr ""
 "\n"
 "# Aplankai\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: negalėjo būti stat'intas.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (key %s, mtime %d): nepavyko atverti.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr ""
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr ""
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
-msgstr ""
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
+msgstr "# %s (key %s, mtime %d): nepavyko atverti.\n"
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr ""
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr ""
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Ne"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " failai, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "ne"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " negalimybės"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " kol kas."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " negalimybės %lu aplankuose.\n"
@@ -198,163 +198,163 @@ msgstr " negalimybės %lu aplankuose.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Rekursyvus kintamasis „%s“ nukreipia į save (anksčiau ar vėliau)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "neterminuota nuoroda į kintamąjį"
 
-#: file.c:271
+#: file.c:278
 #, fuzzy, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Komandos nurodytos failui „%s“ %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, fuzzy, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr "Komandos failui „%s“ rastos pagal neišreikštinę taisyklių paiešką"
 
-#: file.c:280
+#: file.c:287
 #, fuzzy, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "bet „%s“ dabar laikomas tuo pačiu failu kaip „%s“."
 
-#: file.c:283
+#: file.c:290
 #, fuzzy, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "Komandos „%s“ bus ignoruojamos „%s“ komandų naudai."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr ""
 
-#: file.c:401
+#: file.c:408
 #, fuzzy, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Trinamas tarpinis failas „%s“"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Šalinami tarpiniai failai...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Dabartinis laikas"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Laiko žymė už rėžių; keičiama į %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Ne tikslas:"
 
-#: file.c:960
+#: file.c:967
 #, fuzzy
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Brangus failas (reikalingas .PRECIOUS)"
 
-#: file.c:962
+#: file.c:969
 #, fuzzy
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Keistas tikslas (reikalingas .PHONY)."
 
-#: file.c:964
+#: file.c:971
 #, fuzzy
 msgid "#  Command line target."
 msgstr "#  Komandinės eilutės tikslas"
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Numatytoji reikšmė, MAKEFILES, arba -include/sinclude „make“ failas"
 
-#: file.c:968
+#: file.c:975
 #, fuzzy
 msgid "#  Builtin rule"
 msgstr ""
 "\n"
 "# Nėra neišreikštinių taisyklių."
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Neišreikštinių taisyklių paieška atlikta."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Neišreikštinių taisyklių paieška neatlikta."
 
-#: file.c:973
+#: file.c:980
 #, fuzzy, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Išreikštinis/statinis šablono kamienas: „%s“\n"
 
-#: file.c:975
+#: file.c:982
 #, fuzzy
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Failas yra tarpinė sąlyga"
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Taip pat sukuria:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Modifikacijos laikas niekada netikrintas."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Failas neegzistuoja."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Failas labai senas."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Paskutinį kartą pakeista %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Failas atnaujintas."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Failas nebuvo atnaujintas."
 
-#: file.c:1001
+#: file.c:1008
 #, fuzzy
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Dabar vykdomos komandos (TAI KLAIDA)."
 
-#: file.c:1004
+#: file.c:1011
 #, fuzzy
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Vykdomos priklausomybių komandos (TAI KLAIDA)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Sėkmingai atnaujinta."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Turi būti atnaujinta (-q nustatyta)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Nepavyko atnaujinti."
 
-#: file.c:1025
+#: file.c:1032
 #, fuzzy
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Netaisyklinga reikšmė „command_state“ naryje!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -362,7 +362,7 @@ msgstr ""
 "\n"
 "# Failai"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -372,103 +372,121 @@ msgstr ""
 "# failų maišos lentelės statistika:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr ""
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr ""
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr ""
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr ""
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr ""
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr ""
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr ""
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr ""
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr ""
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr ""
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, fuzzy, c-format
 msgid "open: %s: %s"
 msgstr "%s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, fuzzy, c-format
 msgid "write: %s: %s"
 msgstr "rašymo klaida: %s"
 
-#: function.c:2209
-#, c-format
-msgid "Invalid file operation: %s"
+#: function.c:2230 function.c:2267
+#, fuzzy, c-format
+msgid "close: %s: %s"
+msgstr "%s%s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
 msgstr ""
 
-#: function.c:2324
+#: function.c:2262
+#, fuzzy, c-format
+msgid "read: %s: %s"
+msgstr "%s: %s"
+
+#: function.c:2275
+#, fuzzy, c-format
+msgid "file: invalid file operation: %s"
+msgstr "%s: netaisyklingas argumentas -- %c\n"
+
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr ""
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr ""
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr ""
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
 msgstr ""
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
 msgstr ""
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
 msgstr ""
 
-#: function.c:2598
+#: function.c:2657
 #, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
+msgid "Invalid minimum argument count (%u) for function %s"
 msgstr ""
 
-#: function.c:2601
+#: function.c:2660
 #, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
+msgid "Invalid maximum argument count (%u) for function %s"
 msgstr ""
 
 #: getopt.c:659
@@ -566,7 +584,7 @@ msgstr "Rasta neišreikštinė taisyklė tikslui „%s“.\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Rasta neišreikštinė taisyklė tikslui „%s“.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr ""
 
@@ -610,213 +628,184 @@ msgstr ""
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Šalinami tarpiniai failai...\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr ""
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr ""
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr ""
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 #, fuzzy
 msgid "<builtin>"
 msgstr "  (integruota)"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr ""
-
-#: job.c:516 job.c:524
+#: job.c:510
 #, c-format
-msgid "%s[%s] Error %d%s"
+msgid "%s[%s: %s] Error %d%s"
 msgstr ""
 
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr ""
-
-#: job.c:529
-#, fuzzy, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s%s: %s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr ""
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr ""
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr ""
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr ""
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr ""
 
-#: job.c:849
+#: job.c:839
 #, fuzzy, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "%s: nepavyko atverti laikinojo failo: %s"
 
-#: job.c:855
+#: job.c:845
 #, fuzzy, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "%s: nepavyko atverti laikinojo failo: %s"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr ""
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr ""
 
-#: job.c:1036
-#, fuzzy
-msgid "write jobserver"
-msgstr "rašymo klaida: %s"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr ""
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
 "Counted %d args in failed launch\n"
 msgstr ""
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr ""
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr ""
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr ""
-
-#: job.c:2056
+#: job.c:1838
 #, fuzzy, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "touch: Archyvas „%s“ neegzistuoja"
 
-#: job.c:2059
+#: job.c:1841
 #, fuzzy, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%sNėra taisyklės pasiekti tikslui „%s“, kurio reikia „%s“%s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr ""
 
-#: job.c:2173
+#: job.c:1958
 #, fuzzy
 msgid "cannot enforce load limit: "
 msgstr "%s: nepayko pakeisti limito: %s"
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr ""
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr ""
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr ""
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr ""
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: Komanda nerasta"
+
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
 msgstr "%s: Komanda nerasta"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Kevalo programa nerasta"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr ""
 
-#: job.c:2765
+#: job.c:2584
 #, fuzzy, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL pakeistas (buvo „%s“, dabar „%s“)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr ""
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
 msgstr ""
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
 "\t%s\n"
 msgstr ""
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
@@ -845,200 +834,200 @@ msgstr ""
 msgid "Empty symbol name for load: %s"
 msgstr ""
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr ""
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr ""
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr ""
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr ""
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
 msgstr ""
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr ""
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
 msgstr ""
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
 msgstr ""
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr ""
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
 msgstr ""
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
 msgstr ""
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
 "N.\n"
 msgstr ""
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
 msgstr ""
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
 "them.\n"
 msgstr ""
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
 "it.\n"
 msgstr ""
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr ""
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
 msgstr ""
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr ""
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
 msgstr ""
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr ""
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr ""
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
 msgstr ""
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
 msgstr ""
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
 msgstr ""
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "negalimas tuščias failo pavadinimas"
 
-#: main.c:737
+#: main.c:766
 #, fuzzy, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "nežinomas debug lygio specifikacija „%s“"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr ""
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr ""
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1048,175 +1037,132 @@ msgid ""
 "ExceptionAddress = 0x%p\n"
 msgstr ""
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr ""
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr ""
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr ""
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr ""
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr ""
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr ""
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr ""
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr ""
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr ""
-
-#: main.c:1570
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr ""
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr ""
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr ""
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr ""
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr ""
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr ""
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr ""
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr ""
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr ""
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Atnaujinami „make“ failai....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr ""
 
-#: main.c:2237
+#: main.c:2283
 #, fuzzy, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Nereikia atnaujinti taikinio „%s“"
 
-#: main.c:2257
+#: main.c:2303
 #, fuzzy, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "„Make“ failas „%s“ nerastas"
 
-#: main.c:2262
+#: main.c:2308
 #, fuzzy, c-format
 msgid "Makefile '%s' was not found"
 msgstr "„Make“ failas „%s“ nerastas"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Nepavyko grįžti į pirminį aplanką."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr ""
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr ""
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ""
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Nenurodyta tikslų ir nerasta „make“ failų"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Nėra tikslų"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Atnaujinami tikslai...\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Naudojimas: %s [argumentai] [tikslas] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1225,7 +1171,7 @@ msgstr ""
 "\n"
 "Ši programa sukompiliuota %s sistemai\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1234,36 +1180,36 @@ msgstr ""
 "\n"
 "Ši programa sukompiliuota %s (%s) sistemai\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Praneškite apie klaidas adresu <bug-make@gnu.org>\n"
 
-#: main.c:2807
+#: main.c:2869
 #, fuzzy, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "parametrui „-%c“ reikia netuščio argumento"
 
-#: main.c:2871
+#: main.c:2933
 #, fuzzy, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "parametrui „-%c“ reikia teigiamo sveiko argumento"
 
-#: main.c:3269
+#: main.c:3331
 #, fuzzy, c-format
 msgid "%sBuilt for %s\n"
 msgstr ""
 "\n"
 "%sŠi programa sukompiliuota %s sistemai\n"
 
-#: main.c:3271
+#: main.c:3333
 #, fuzzy, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr ""
 "\n"
 "%sŠi programa sukompiliuota %s (%s) sistemai\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1272,43 +1218,43 @@ msgid ""
 "%sThere is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
 "# Make data base, printed on %s"
 msgstr ""
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
 "# Finished Make data base on %s\n"
 msgstr ""
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Nežinoma klaida %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: user %lu (real %lu), group %lu (real %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr ""
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr ""
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr ""
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr ""
 
@@ -1371,366 +1317,405 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr ""
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr ""
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr ""
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr ""
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr ""
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr ""
+
+#: posixos.c:154
+#, fuzzy
+msgid "write jobserver"
+msgstr "rašymo klaida: %s"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr ""
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr ""
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Skaitomi „make“ failai...\n"
 
-#: read.c:335
+#: read.c:329
 #, fuzzy, c-format
 msgid "Reading makefile '%s'"
 msgstr "Skaitomas „make“ failas „%s“"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (nėra numatytojo tikslo)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (paieškos kelias)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (nesvarbu)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (nėra ~ išplėtimo)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr ""
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr ""
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "netaisyklinga sąlygos sintaksė"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr ""
 
-#: read.c:992
+#: read.c:985
 #, fuzzy
 msgid "recipe commences before first target"
 msgstr "komandos prasideda prieš pirmąjį tikslą"
 
-#: read.c:1041
+#: read.c:1034
 #, fuzzy
 msgid "missing rule before recipe"
 msgstr "trūksta taisyklės prieš komandas"
 
-#: read.c:1131
+#: read.c:1124
 #, fuzzy
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr " (ar norėjote padėti TAB simbolį vietoje 8 tarpų?)"
 
-#: read.c:1133
+#: read.c:1126
 #, fuzzy
 msgid "missing separator"
 msgstr "trūksta skirtuko%s"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "trūksta tikslo šablono"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "keli tikslo šablonai"
 
-#: read.c:1276
+#: read.c:1268
 #, fuzzy, c-format
 msgid "target pattern contains no '%%'"
 msgstr "tikslo šablone nėra „%%“"
 
-#: read.c:1398
+#: read.c:1390
 #, fuzzy
 msgid "missing 'endif'"
 msgstr "trūksta „endif“"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "tuščias kintamojo pavadinimas"
 
-#: read.c:1471
+#: read.c:1463
 #, fuzzy
 msgid "extraneous text after 'define' directive"
 msgstr "Perteklinis tekstas po „endef“ direktyvos"
 
-#: read.c:1496
+#: read.c:1488
 #, fuzzy
 msgid "missing 'endef', unterminated 'define'"
 msgstr "trūksta „endef“, nebaigtas „define“"
 
-#: read.c:1524
+#: read.c:1516
 #, fuzzy
 msgid "extraneous text after 'endef' directive"
 msgstr "Perteklinis tekstas po „endef“ direktyvos"
 
-#: read.c:1595
+#: read.c:1588
 #, fuzzy, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "Perteklinis tekstas po „%s“ direktyvos"
 
-#: read.c:1596
+#: read.c:1589
 #, fuzzy, c-format
 msgid "extraneous '%s'"
 msgstr "perteklinis „%s“"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr ""
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr ""
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr ""
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr ""
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr ""
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr ""
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr ""
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr ""
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr ""
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr ""
 
-#: read.c:2229
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr ""
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr ""
 
-#: remake.c:230
+#: remake.c:225
 #, fuzzy, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Nėra ką daryti su „%s“."
 
-#: remake.c:231
+#: remake.c:226
 #, fuzzy, c-format
 msgid "'%s' is up to date."
 msgstr "„%s“ atnaujinti nereikia."
 
-#: remake.c:303
+#: remake.c:322
 #, fuzzy, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Vis dar atnaujinamas failas „%s“.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%sNėra taisyklės pasiekti tikslui „%s“, kurio reikia „%s“%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sNėra taisyklės pasiekti tikslui „%s“%s"
 
-#: remake.c:426
+#: remake.c:441
 #, fuzzy, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Svarstomas tikslo failas „%s“.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, fuzzy, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Neseniai bandyta ir nepavyko atnaujinti failo „%s“.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, fuzzy, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Failas „%s“ jau apsvarstytas.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, fuzzy, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Vis dar atnaujinamas failas „%s“.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, fuzzy, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Baigtas atnaujinti failas „%s“.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, fuzzy, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Failas „%s“ neegzistuoja.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
 msgstr ""
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, fuzzy, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Rasta neišreikštinė taisyklė tikslui „%s“.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, fuzzy, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Nerasta neišreikštinių taisyklių tikslui „%s“.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr ""
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr ""
 
-#: remake.c:675
+#: remake.c:690
 #, fuzzy, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Svarstomas tikslo failas „%s“.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr ""
 
-#: remake.c:695
+#: remake.c:710
 #, fuzzy, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Svarstomas tikslo failas „%s“.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, fuzzy, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Tikslas „%s“ neatnaujintas dėl klaidų."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr ""
 
-#: remake.c:757
+#: remake.c:772
 #, fuzzy, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Failas „%s“ neegzistuoja.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr ""
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr ""
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr ""
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr ""
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr ""
 
-#: remake.c:803
+#: remake.c:818
 #, fuzzy, c-format
 msgid "No need to remake target '%s'"
 msgstr "Nereikia atnaujinti taikinio „%s“"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr ""
 
-#: remake.c:825
+#: remake.c:840
 #, fuzzy, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Būtina atnaujinti taikinį „%s“.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr ""
 
-#: remake.c:840
+#: remake.c:855
 #, fuzzy, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Vykdomos „%s“ komandos.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, fuzzy, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Nereikia atnaujinti taikinio „%s“"
 
-#: remake.c:850
+#: remake.c:865
 #, fuzzy, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Būtina atnaujinti taikinį „%s“.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr ""
 
-#: remake.c:1048
+#: remake.c:1063
 #, fuzzy, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "paskutinė komanda: %s\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr ""
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr ""
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ""
@@ -1740,7 +1725,7 @@ msgstr ""
 msgid "Customs won't export: %s\n"
 msgstr ""
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1748,7 +1733,7 @@ msgstr ""
 "\n"
 "# Neišreikštinės taisyklės"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1756,7 +1741,7 @@ msgstr ""
 "\n"
 "# Nėra neišreikštinių taisyklių."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1765,11 +1750,11 @@ msgstr ""
 "\n"
 "# %u neišreikštinių taisyklių, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr ""
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr ""
@@ -1935,14 +1920,14 @@ msgstr "Informacijos užklausa"
 msgid "Floating point co-processor not available"
 msgstr "Slankaus kablelio koprocesorius neprieinamas"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
 msgstr ""
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -1950,31 +1935,31 @@ msgid ""
 "B\n"
 msgstr ""
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr ""
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
 "%s strcache performance: lookups = %lu / hit rate = %lu%%\n"
 msgstr ""
 
-#: strcache.c:289
+#: strcache.c:328
 #, fuzzy
 msgid ""
 "# hash-table stats:\n"
@@ -1984,64 +1969,64 @@ msgstr ""
 "# failų maišos lentelės statistika:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr ""
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr ""
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr ""
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr ""
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr ""
 
-#: variable.c:1614
+#: variable.c:1644
 #, fuzzy
 msgid "command line"
 msgstr "%s: komanda nerasta"
 
-#: variable.c:1617
+#: variable.c:1647
 #, fuzzy
 msgid "'override' directive"
 msgstr "tuščia „override“ direktyva"
 
-#: variable.c:1628
+#: variable.c:1658
 #, fuzzy, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (nuo „%s“, %lu eilutė):\n"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr ""
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
 msgstr ""
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
 msgstr ""
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
 msgstr ""
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2058,117 +2043,98 @@ msgstr "%s: neatpažintas argumentas „%c%s“\n"
 msgid "sys$search() failed with %d\n"
 msgstr ""
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr ""
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr ""
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr ""
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr ""
 
-#: vmsjobs.c:501
-#, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr ""
-
-#: vmsjobs.c:505
-#, fuzzy, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "paskutinė komanda: %s\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
+#: vmsjobs.c:1228
 #, c-format
-msgid "Error, empty command\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr ""
-
-#: vmsjobs.c:681
-#, fuzzy, c-format
-msgid "Redirected error to %s\n"
-msgstr "skaitymo klaida: %d: %s"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr ""
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr ""
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr ""
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr ""
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr ""
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
 msgstr ""
 
-#: vpath.c:600
+#: vpath.c:620
 #, fuzzy
 msgid "# No 'vpath' search paths."
 msgstr " (paieškos kelias)"
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
 "# %u 'vpath' search paths.\n"
 msgstr ""
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
 msgstr ""
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
 "# "
 msgstr ""
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr ""
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr ""
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr ""
+
 #~ msgid "#  Invalid value in `update_status' member!"
 #~ msgstr "#  Netaisyklinga reikšmė „update_status“ naryje!"
 
@@ -2184,3 +2150,7 @@ msgstr ""
 #, fuzzy
 #~ msgid "invalid `override' directive"
 #~ msgstr "netaisyklinga „override“ direktyva"
+
+#, fuzzy
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "skaitymo klaida: %d: %s"
index 0faab64..ac514a9 100644 (file)
@@ -1,14 +1,14 @@
 # SOME DESCRIPTIVE TITLE.
 # Copyright (C) YEAR Free Software Foundation, Inc.
-# This file is distributed under the same license as the PACKAGE package.
+# This file is distributed under the same license as the GNU make package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU make 4.1\n"
+"Project-Id-Version: GNU make 4.2\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -46,144 +46,144 @@ msgstr ""
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr ""
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr ""
 
-#: arscan.c:255
+#: arscan.c:261
 #, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr ""
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr ""
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr ""
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr ""
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr ""
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr ""
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr ""
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr ""
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr ""
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr ""
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr ""
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr ""
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr ""
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr ""
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
 msgstr ""
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr ""
 
-#: dir.c:1005
+#: dir.c:1085
 #, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr ""
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr ""
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr ""
 
-#: dir.c:1041
+#: dir.c:1122
 #, c-format
-msgid "# %s (key %s, mtime %d): "
+msgid "# %s (key %s, mtime %ull): "
 msgstr ""
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr ""
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr ""
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr ""
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr ""
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr ""
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr ""
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr ""
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr ""
@@ -193,262 +193,280 @@ msgstr ""
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr ""
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr ""
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr ""
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ""
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr ""
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ""
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr ""
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr ""
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr ""
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr ""
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr ""
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr ""
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr ""
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr ""
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr ""
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr ""
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr ""
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr ""
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr ""
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr ""
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr ""
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr ""
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr ""
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr ""
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr ""
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr ""
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr ""
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr ""
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr ""
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr ""
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr ""
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr ""
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr ""
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr ""
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
 msgstr ""
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
 "# "
 msgstr ""
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr ""
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr ""
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr ""
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr ""
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr ""
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr ""
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr ""
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr ""
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr ""
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr ""
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr ""
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr ""
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
+#, c-format
+msgid "close: %s: %s"
+msgstr ""
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr ""
+
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr ""
+
+#: function.c:2275
 #, c-format
-msgid "Invalid file operation: %s"
+msgid "file: invalid file operation: %s"
 msgstr ""
 
-#: function.c:2324
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr ""
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr ""
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr ""
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
 msgstr ""
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
 msgstr ""
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
 msgstr ""
 
-#: function.c:2598
+#: function.c:2657
 #, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
+msgid "Invalid minimum argument count (%u) for function %s"
 msgstr ""
 
-#: function.c:2601
+#: function.c:2660
 #, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
+msgid "Invalid maximum argument count (%u) for function %s"
 msgstr ""
 
 #: getopt.c:659
@@ -546,7 +564,7 @@ msgstr ""
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr ""
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr ""
 
@@ -590,210 +608,182 @@ msgstr ""
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr ""
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr ""
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr ""
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr ""
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr ""
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr ""
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
-msgstr ""
-
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr ""
-
-#: job.c:529
+#: job.c:510
 #, c-format
-msgid "%s[%s] %s%s%s"
+msgid "%s[%s: %s] Error %d%s"
 msgstr ""
 
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr ""
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr ""
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr ""
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr ""
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr ""
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr ""
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr ""
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr ""
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr ""
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr ""
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr ""
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
 "Counted %d args in failed launch\n"
 msgstr ""
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr ""
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr ""
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr ""
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr ""
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr ""
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr ""
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr ""
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr ""
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr ""
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr ""
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr ""
 
-#: job.c:2458
+#: job.c:2275
+#, c-format
+msgid "%s: %s: Command not found\n"
+msgstr ""
+
+#: job.c:2277
 #, c-format
-msgid "%s: Command not found"
+msgid "%s[%u]: %s: Command not found\n"
 msgstr ""
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr ""
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr ""
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr ""
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr ""
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
 msgstr ""
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
 "\t%s\n"
 msgstr ""
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
@@ -822,200 +812,200 @@ msgstr ""
 msgid "Empty symbol name for load: %s"
 msgstr ""
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr ""
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr ""
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr ""
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr ""
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
 msgstr ""
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr ""
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
 msgstr ""
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
 msgstr ""
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr ""
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
 msgstr ""
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
 msgstr ""
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
 "N.\n"
 msgstr ""
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
 msgstr ""
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
 "them.\n"
 msgstr ""
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
 "it.\n"
 msgstr ""
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr ""
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
 msgstr ""
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr ""
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
 msgstr ""
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr ""
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr ""
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
 msgstr ""
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
 msgstr ""
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
 msgstr ""
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr ""
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr ""
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr ""
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr ""
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1025,214 +1015,171 @@ msgid ""
 "ExceptionAddress = 0x%p\n"
 msgstr ""
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr ""
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr ""
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr ""
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr ""
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr ""
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr ""
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr ""
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr ""
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr ""
-
-#: main.c:1570
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr ""
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr ""
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr ""
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr ""
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr ""
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr ""
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr ""
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr ""
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr ""
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr ""
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr ""
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr ""
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr ""
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr ""
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr ""
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr ""
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr ""
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ""
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr ""
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr ""
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr ""
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr ""
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
 "This program built for %s\n"
 msgstr ""
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
 "This program built for %s (%s)\n"
 msgstr ""
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr ""
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr ""
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr ""
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr ""
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr ""
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1241,43 +1188,43 @@ msgid ""
 "%sThere is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
 "# Make data base, printed on %s"
 msgstr ""
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
 "# Finished Make data base on %s\n"
 msgstr ""
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr ""
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr ""
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr ""
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr ""
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr ""
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr ""
 
@@ -1339,358 +1286,396 @@ msgstr ""
 msgid "%s: %s"
 msgstr ""
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr ""
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr ""
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr ""
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr ""
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr ""
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr ""
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr ""
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr ""
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr ""
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr ""
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr ""
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr ""
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr ""
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr ""
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr ""
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr ""
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr ""
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr ""
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr ""
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr ""
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr ""
 
-#: read.c:1131
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr ""
 
-#: read.c:1133
+#: read.c:1126
 msgid "missing separator"
 msgstr ""
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr ""
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr ""
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr ""
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr ""
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr ""
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr ""
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr ""
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr ""
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr ""
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr ""
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr ""
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr ""
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr ""
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr ""
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr ""
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr ""
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr ""
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr ""
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr ""
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr ""
 
-#: read.c:2229
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr ""
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr ""
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr ""
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr ""
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr ""
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr ""
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr ""
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr ""
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr ""
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr ""
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr ""
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr ""
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr ""
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
 msgstr ""
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr ""
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr ""
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr ""
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr ""
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr ""
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr ""
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr ""
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr ""
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr ""
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr ""
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr ""
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr ""
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr ""
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr ""
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr ""
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr ""
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr ""
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr ""
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr ""
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr ""
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr ""
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr ""
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr ""
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr ""
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr ""
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr ""
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ""
@@ -1700,30 +1685,30 @@ msgstr ""
 msgid "Customs won't export: %s\n"
 msgstr ""
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
 msgstr ""
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
 msgstr ""
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
 "# %u implicit rules, %u"
 msgstr ""
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr ""
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr ""
@@ -1884,14 +1869,14 @@ msgstr ""
 msgid "Floating point co-processor not available"
 msgstr ""
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
 msgstr ""
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -1899,92 +1884,92 @@ msgid ""
 "B\n"
 msgstr ""
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr ""
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
 "%s strcache performance: lookups = %lu / hit rate = %lu%%\n"
 msgstr ""
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
 msgstr ""
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr ""
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr ""
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr ""
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr ""
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr ""
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr ""
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr ""
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr ""
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr ""
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
 msgstr ""
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
 msgstr ""
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
 msgstr ""
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2001,112 +1986,93 @@ msgstr ""
 msgid "sys$search() failed with %d\n"
 msgstr ""
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr ""
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr ""
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr ""
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr ""
 
-#: vmsjobs.c:501
-#, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr ""
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr ""
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr ""
-
-#: vmsjobs.c:681
+#: vmsjobs.c:1228
 #, c-format
-msgid "Redirected error to %s\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr ""
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr ""
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr ""
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr ""
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr ""
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
 msgstr ""
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr ""
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
 "# %u 'vpath' search paths.\n"
 msgstr ""
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
 msgstr ""
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
 "# "
 msgstr ""
+
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr ""
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr ""
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr ""
index 74e6381..989eb8b 100644 (file)
Binary files a/po/nl.gmo and b/po/nl.gmo differ
index 56bcb1c..c248d5d 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,17 +1,17 @@
 # Dutch translations for GNU make.
-# Copyright (C) 2013 Free Software Foundation, Inc.
+# Copyright (C) 2016 Free Software Foundation, Inc.
 # This file is distributed under the same license as the make package.
 #
-# « A quoi bon cette forfanterie? »
+# "On the plus side, Miss Vernon was outstandingly good-looking."
 #
 # Taco Witte <tcwitte@cs.uu.nl>, 2004.
-# Benno Schulenberg <benno@vertaalt.nl>, 2005, 2006, 2007, 2010, 2013.
+# Benno Schulenberg <benno@vertaalt.nl>, 2005, 2006, 2007, 2010, 2013, 2014, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: make-4.0\n"
+"Project-Id-Version: make-4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-10-09 21:18+0200\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-26 11:11+0200\n"
 "Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "Language: nl\n"
@@ -50,84 +50,85 @@ msgstr "touch: onderdeel '%s' bestaat niet in '%s'"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: ar_member_touch() van '%s' is mislukt"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 "uitpakken van module-info door lbr$set_module() is mislukt, afsluitwaarde= %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control() is mislukt, afsluitwaarde = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "kan bibliotheek '%s' niet openen om onderdeel '%s' op te zoeken"
+msgstr ""
+"kan bibliotheek '%s' niet openen om status van onderdeel %d op te zoeken"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Onderdeel '%s'%s: %ld bytes bij %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (naam kan afgekapt zijn)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Datum %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, modus = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "Recept bevat te veel regels (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Afgebroken.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Archiefonderdeel '%s' kan onecht zijn; niet verwijderd"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Archiefonderdeel '%s' kan onecht zijn; niet verwijderd"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Verwijderen van bestand '%s'"
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Verwijderen van bestand '%s'"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  uit te voeren recept"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (ingebouwd):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (uit '%s', regel %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -135,62 +136,62 @@ msgstr ""
 "\n"
 "# Mappen\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# kan status van %s niet opvragen.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (sleutel %s, wijzigingstijd %d): kan niet worden geopend.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (apparaat %d, inode [%d,%d,%d]): kan niet worden geopend.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (apparaat %ld, inode %ld): kan niet worden geopend.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (sleutel %s, wijzigingstijd %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (apparaat %d, inode [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (apparaat %ld, inode %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Geen"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " bestanden, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "geen"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " onmogelijkheden"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " tot nu toe."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " onmogelijkheden in %lu mappen.\n"
@@ -200,154 +201,154 @@ msgstr " onmogelijkheden in %lu mappen.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Recursieve variabele '%s' verwijst naar zichzelf (uiteindelijk)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "onafgemaakte verwijzing naar variabele"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Recept voor bestand '%s' is opgegeven in %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr "Recept voor bestand '%s' werd gevonden via impliciet zoeken,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "maar '%s' wordt nu als hetzelfde bestand beschouwd als '%s'."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "Recept voor '%s' zal worden genegeerd ten gunste van die voor '%s'."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "kan enkeldubbelpunts '%s' niet hernoemen tot dubbeldubbelpunts '%s'"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "kan dubbeldubbelpunts '%s' niet hernoemen tot enkeldubbelpunts '%s'"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Verwijderen van tussentijds bestand '%s'"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Verwijderen van tussentijdse bestanden...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Huidige tijd"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Tijdsstempel ligt buiten bereik; wordt vervangen door %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Is geen doel:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Waardevol bestand (vereiste van .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Nepdoel (vereiste van .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Doel afkomstig van opdrachtregel."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr ""
 "#  Een standaard Makefile, of eentje via MAKEFILES of '-include/sinclude'."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "#  Ingebouwde regel"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Impliciete regel-zoekopdracht is uitgevoerd."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Impliciete regel-zoekopdracht is niet uitgevoerd."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Impliciete/statische patroonstam: '%s'\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Bestand is een tussentijds vereiste."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Maakt ook:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Wijzigingstijd is nooit gecontroleerd."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Bestand bestaat niet."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Bestand is erg oud."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Laatst gewijzigd %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Bestand is bijgewerkt."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Bestand is niet bijgewerkt."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Nog lopend recept (DIT IS EEN PROGRAMMAFOUT)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Nog lopende receptafhankelijkheden (DIT IS EEN PROGRAMMAFOUT)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Met succes bijgewerkt."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Moet worden bijgewerkt ('-q' is ingesteld)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Bijwerken is mislukt."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Ongeldige waarde in 'command_state'-onderdeel!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -355,7 +356,7 @@ msgstr ""
 "\n"
 "# Bestanden"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -365,105 +366,122 @@ msgstr ""
 "# hashtabel-statistieken van bestanden:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: Veld '%s' is niet gecached: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "niet-numeriek eerste argument van 'word'-functie"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "eerste argument van 'word'-functie moet groter zijn dan 0"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "niet-numeriek eerste argument van 'wordlist'-functie"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "niet-numeriek tweede argument van 'wordlist'-functie"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe(): DuplicateHandle(In) is mislukt (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe(): DuplicateHandle(Err) is mislukt (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() is mislukt (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() is mislukt\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Opschonen van tijdelijk batch-bestand %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "file: ontbrekende bestandsnaam"
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "open(): %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "write(): %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
+#, c-format
+msgid "close: %s: %s"
+msgstr "close(): %s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "file: te veel argumenten"
+
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr "read(): %s: %s"
+
+#: function.c:2275
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr "Ongeldige bestandsbewerking: %s"
+msgid "file: invalid file operation: %s"
+msgstr "file: ongeldige bestandsbewerking: %s"
 
-#: function.c:2324
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "onvoldoende aantal argumenten (%d) voor functie '%s'"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "niet-geïmplementeerd op dit platform: functie '%s'"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "onafgemaakte aanroep van functie '%s': '%c' ontbreekt"
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "Lege functienaam\n"
+msgstr "Lege functienaam"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "Ongeldige functienaam: %s\n"
+msgstr "Ongeldige functienaam: %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "Functienaam is te lang: %s\n"
+msgstr "Functienaam is te lang: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "Ongeldig minimumaantal argumenten (%d) voor functie '%s'\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "Ongeldig minimumaantal argumenten (%d) voor functie '%s'"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "Ongeldig maximumaantal argumenten (%d) voor functie '%s'\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "Ongeldig maximumaantal argumenten (%d) voor functie '%s'"
 
 #: getopt.c:659
 #, c-format
@@ -562,7 +580,7 @@ msgstr "Zoeken naar impliciete regel voor '%s'.\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Zoeken naar archiefonderdeel-impliciete regel voor '%s'.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Impliciete regelrecursie wordt ontweken.\n"
 
@@ -606,100 +624,76 @@ msgstr "Vereiste '%s' gevonden als VPATH '%s'.\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Zoeken naar een regel met tussentijds bestand '%s'.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Kan geen tijdelijk bestand aanmaken\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (geheugendump gemaakt)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (genegeerd)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<ingebouwd>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: recept voor doel '%s' is mislukt"
-
-#: job.c:516 job.c:524
+#: job.c:510
 #, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "%s[%s] Fout %d%s"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] Fout %d%s"
 
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Fout 0x%x%s"
-
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Wachten op onvoltooide taken..."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Levend dochterproces %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (ginds)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Beëindigen van verliezend dochterproces %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Beëindigen van winnend dochterproces %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Opschonen van tijdelijk batch-bestand %s\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Opschonen van tijdelijk batch-bestand %s is mislukt (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Verwijderen van dochterproces %p PID %s%s uit de ketting.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "vrijgeven van taakserver-semafoor: (Fout %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Token vrijgegeven voor dochterproces %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "schrijven naar taakserver"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() kan geen proces starten (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -708,104 +702,100 @@ msgstr ""
 "\n"
 "%d argumenten geteld bij mislukte start\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Opname van dochterproces %p (%s) PID %s%s in de ketting.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "wachten op semafoor of dochterproces: (Fout %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Token verkregen voor dochterproces %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "lezen van taken-pijp"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: doel '%s' bestaat niet"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: bijwerken van doel '%s' vanwege: %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "kan belastingsgrenzen niet afdwingen op dit besturingssysteem"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "kan belastingsgrens niet afdwingen: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
 "geen bestandshandvatten meer beschikbaar: kan standaardinvoer niet "
 "dupliceren\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
 "geen bestandshandvatten meer beschikbaar: kan standaarduitvoer niet "
 "dupliceren\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
 "geen bestandshandvatten meer beschikbaar: kan standaardfoutuitvoer niet "
 "dupliceren\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Kan standaardinvoer niet herstellen\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Kan standaarduitvoer niet herstellen\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "Kan standaardfoutuitvoer niet herstellen\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr ""
 "'make' heeft dochterproces met PID %s verwerkt, maar wacht nog op PID %s\n"
 
-#: job.c:2458
+#: job.c:2275
+#, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: Opdracht niet gevonden\n"
+
+#: job.c:2277
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: Opdracht niet gevonden"
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: Opdracht niet gevonden\n"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Shell-programma niet gevonden"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: mogelijk geen omgevingsruimte meer beschikbaar"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL is gewijzigd (was '%s', is nu '%s')\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Maken van tijdelijk batch-bestand %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -813,7 +803,7 @@ msgstr ""
 "Inhoud van batch-bestand:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -822,7 +812,7 @@ msgstr ""
 "Inhoud van batch-bestand:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (regel %d) Onjuiste shell-context (!unixy && !batch_mode_shell)\n"
@@ -853,62 +843,62 @@ msgstr "Laden van symbool %s uit %s is mislukt: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "Lege symboolnaam om te laden: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Laden van symbool %s uit %s\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "De 'load'-operatie wordt op dit platform niet ondersteund."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Opties:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr ""
 "  -b, -m                       (genegeerd, maar herkend wegens "
 "compatibiliteit)\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make            onvoorwaardelijk alle doelen maken\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
 msgstr ""
 "  -C MAP, --directory=MAP      naar deze map gaan alvorens iets te doen\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr ""
 "  -d                           veel informatie weergeven voor het debuggen\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=VLAGGEN]            verschillende soorten debuginformatie "
 "weergeven\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
 msgstr ""
 "  -e, --environment-overrides  omgevingsvariabelen gaan boven Makefiles\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "  --eval=TEKST                 deze TEKST als Makefile-statement evalueren\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -917,15 +907,15 @@ msgstr ""
 "                               het gegeven bestand als Makefile gebruiken\n"
 "\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                   deze hulptekst tonen en stoppen\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr "  -i, --ignore-errors          alle fouten in recepten negeren\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -933,7 +923,7 @@ msgstr ""
 "  -I MAP, --include-dir=MAP    deze map doorzoeken naar ingesloten "
 "Makefiles\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -941,14 +931,14 @@ msgstr ""
 "  -j [N], --jobs[=N]           het uitvoeren van N taken tegelijk toestaan;\n"
 "                               zonder N is het aantal onbeperkt\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going             doorgaan als een doel niet gemaakt kan "
 "worden\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -958,7 +948,7 @@ msgstr ""
 "                               alleen extra taken starten als de\n"
 "                               systeembelasting lager is dan N\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -967,7 +957,7 @@ msgstr ""
 "                               de laatste wijzigingstijd gebruiken\n"
 "\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -976,7 +966,7 @@ msgstr ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                               recepten niet uitvoeren, alleen weergeven\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -986,7 +976,7 @@ msgstr ""
 "                               BESTAND als oud beschouwen, niet opnieuw "
 "maken\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -995,12 +985,12 @@ msgstr ""
 "                               uitvoer van parallelle taken synchroniseren "
 "op TYPE\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr ""
 "  -p, --print-data-base        interne gegevensbank van 'make' weergeven\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1008,47 +998,47 @@ msgstr ""
 "  -q, --question               geen recepten uitvoeren; de afsluitwaarde\n"
 "                               geeft aan of alles bijgewerkt is\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules       ingebouwde impliciete regels uitzetten\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables   ingebouwde instellingen van variabelen "
 "uitzetten\n"
 "\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet        recepten niet weergeven\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
 msgstr "  -S, --no-keep-going, --stop  optie '-k' uitzetten\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                  doelen aanraken in plaats van opnieuw maken\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                      tracing-informatie weergeven\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr "  -v, --version                programmaversie tonen en stoppen\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory        de huidige map weergeven\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1056,7 +1046,7 @@ msgstr ""
 "  --no-print-directory         optie '-w' uitzetten, ook als deze impliciet\n"
 "                               was aangezet\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1064,7 +1054,7 @@ msgstr ""
 "  -W BESTAND, --what-if=BESTAND, --new-file=BESTAND, --assume-new=BESTAND\n"
 "                               BESTAND als oneindig nieuw beschouwen\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1072,26 +1062,26 @@ msgstr ""
 "  --warn-undefined-variables   waarschuwen als naar een ongedefinieerde\n"
 "                               variabele wordt verwezen\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "lege tekenreeks is ongeldig als bestandsnaam"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "onbekende aanduiding '%s' voor debug-niveau"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "onbekend uitvoersynchronisatie-type: '%s'"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: Onderbreking/uitzondering gekregen (code = 0x%lx, adres = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1106,184 +1096,140 @@ msgstr ""
 "ExceptionFlags = %lx\n"
 "ExceptionAddress = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Toegangsrechtenovertreding: schrijfopdracht op adres 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Toegangsrechtenovertreding: leesopdracht op adres 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() stelt default_shell = %s in\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr ""
 "find_and_set_shell() stelt na doorzoeken van pad default_shell = %s in\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s slaapt gedurende 30 seconden..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "klaar met 30 seconden slapen.  Make gaat verder.\n"
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
-"*interne fout*: kan taakserver-semafoor '%s' niet openen: (Fout %ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Taakservercliënt (semafoor %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "*interne fout*: ongeldige tekenreeks '%s' voor '--jobserver-fds'"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Taakservercliënt (bestandsdescriptor %d,%d)\n"
+"Waarschuwing: taakserver is onbeschikbaar: '-j1' wordt gebruikt.  Voeg '+' "
+"toe aan de ouderregel."
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
 "Waarschuwing: '-jN' is afgedwongen in een deelproces: taakserver-modus "
 "uitgezet."
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "dubbele taakserver"
-
-#: main.c:1570
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-"Waarschuwing: taakserver is onbeschikbaar: '-j1' wordt gebruikt.  Voeg '+' "
-"toe aan de ouderregel."
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefile op standaardinvoer is dubbel opgegeven."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (tijdelijk bestand)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (tijdelijk bestand)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Parallelle taken (-j) worden op dit platform niet ondersteund."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Opnieuw instellen op enkele-taakmodus (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Taakserver-plaatsen zijn beperkt tot %d\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "aanmaken van taakserver-semafoor: (Fout %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "aanmaken van taken-pijp"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "initialiseren van taakserver-pijp"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr ""
 "Symbolische koppelingen worden niet ondersteund: '-L' wordt uitgeschakeld."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Bijwerken van Makefiles...\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "Makefile '%s' bevat mogelijk een lus; wordt niet opnieuw gemaakt.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Opnieuw maken van Makefile '%s' is mislukt."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Ingesloten Makefile '%s' is niet gevonden."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Makefile '%s' is niet gevonden."
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Kan niet terugkeren naar oorspronkelijke map."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Opnieuw uitvoeren[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "verwijderen (van tijdelijk bestand): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL bevat meer dan één doel"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Geen doelen opgegeven en geen Makefile gevonden"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Geen doelen"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Bijwerken van doelen...\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "Waarschuwing:  Klokafwijking geconstateerd.  Het maken is mogelijk "
 "onvolledig gebeurd."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Gebruik:  %s [OPTIES] [DOEL]...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1292,7 +1238,7 @@ msgstr ""
 "\n"
 "Dit programma is gecompileerd voor %s.\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1301,34 +1247,34 @@ msgstr ""
 "\n"
 "Dit programma is gecompileerd voor %s (%s).\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr ""
 "Rapporteer programmafouten aan <bug-make@gnu.org>,\n"
 "meld gebreken in de vertaling aan <vertaling@vrijschrift.org>.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "de optie '%s%sc' vereist een niet-lege tekenreeks als argument"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "de optie '-%c' vereist een positief geheel getal als argument"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sDit programma is gecompileerd voor %s.\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sDit programma is gecompileerd voor %s (%s).\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1342,7 +1288,7 @@ msgstr ""
 "verspreiden.\n"
 "%sEr is GEEN GARANTIE, voor zover de wet dit toestaat.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1351,7 +1297,7 @@ msgstr ""
 "\n"
 "# Make-gegevensbank, weergegeven op %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1360,29 +1306,29 @@ msgstr ""
 "\n"
 "# Make-gegevensbank voltooid op %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Onbekende fout %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: gebruiker %lu (echt %lu), groep %lu (echt %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Toegang geïnitialiseerd"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Gebruikerstoegang"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Make-toegang"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Dochterprocestoegang"
 
@@ -1427,9 +1373,8 @@ msgid "%s[%u]: Leaving directory '%s'\n"
 msgstr "%s[%u]: Map '%s' wordt verlaten\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "schrijffout: %s"
+msgstr "schrijffout: standaarduitvoer"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1445,225 +1390,261 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "aanmaken van takenpijp"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "dupliceren van takenpijp"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "initialiseren van taakserverpijp"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "*interne fout*: ongeldige tekenreeks '%s' voor '--jobserver-auth'"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Taakservercliënt (bestandsdescriptor %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "taakserverpijplijn"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "schrijven naar taakserver"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "pselect() van takenpijp"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "lezen van takenpijp"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Lezen van Makefiles...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "Lezen van Makefile '%s'"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (geen standaarddoel)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (zoekpad)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (maakt niet uit)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (geen expansie van ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "UTF-8 BOM in Makefile '%s' wordt overgeslagen\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "UTF-8 BOM in Makefile-buffer wordt overgeslagen\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
-msgstr "ongeldige syntaxis in voorwaardelijk deel"
+msgstr "ongeldige syntax in voorwaardelijk deel"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: laden is mislukt"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "recept begint voor eerste doel"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "ontbrekende regel vóór recept"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (bedoelde u TAB in plaats van 8 spaties?)"
+msgstr ""
+"ontbrekend scheidingsteken (bedoelde u een TAB in plaats van 8 spaties?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "ontbrekend scheidingsteken%s"
+msgstr "ontbrekend scheidingsteken"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "ontbrekend doelpatroon"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "meerdere doelpatronen"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "doelpatroon bevat geen '%%'"
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "ontbrekende 'endif'"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "lege naam van variabele"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "extra tekst na 'define'-opdracht"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "ontbrekende 'endef', onafgemaakte 'define'"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "extra tekst na 'endef'-opdracht"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "extra tekst na '%s'-opdracht"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "extra '%s'"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "slechts één 'else' per voorwaardelijk deel"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Onjuiste doelspecifieke variabele-definitie"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "vereisten kunnen niet in recepten gedefinieerd worden"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "gemengde impliciete en statische patroonregels"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "gemengde impliciete en normale regels"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "doel '%s' komt niet overeen met doelpatroon"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "doelbestand '%s' heeft zowel ':'- als '::'-items"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "doel '%s' is meerdere keren gegeven in dezelfde regel"
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "Waarschuwing: er wordt voorbijgegaan aan recept voor doel '%s'"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "Waarschuwing: oud recept voor doel '%s' wordt genegeerd"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "gemengde impliciete en normale regels"
+msgstr "*** gemengde impliciete en normale regels: verouderde syntax"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "Waarschuwing: NUL-teken gezien; de rest van de regel wordt genegeerd"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Er hoeft niets gedaan te worden voor '%s'."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "'%s' is up-to-date."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Snoeien van bestand '%s'.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%sEr is geen regel om doel '%s' te maken, nodig voor '%s'%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sEr is geen regel om doel '%s' te maken%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Doelbestand '%s' wordt overwogen.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Bijwerken van bestand '%s' is recent geprobeerd en mislukt.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Bestand '%s' was al overwogen.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Bestand '%s' wordt nog bijgewerkt.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Bijwerken van bestand '%s' is voltooid.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Bestand '%s' bestaat niet.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1671,139 +1652,139 @@ msgstr ""
 "*** Waarschuwing: .LOW_RESOLUTION_TIME-bestand '%s' heeft een hoge-resolutie "
 "tijdsstempel"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Impliciete regel voor '%s' gevonden.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Geen impliciete regel voor '%s' gevonden.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Standaardrecept wordt gebruikt voor '%s'.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Circulaire afhankelijkheid %s <- %s is verworpen."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Vereisten van doelbestand '%s' zijn voltooid.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "De vereisten van '%s' worden nu gemaakt.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Pogingen voor doelbestand '%s' worden gestaakt.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Doel '%s' is niet opnieuw gemaakt vanwege fouten."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Vereiste '%s' is alleen-ordenen voor doel '%s'.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Vereiste '%s' van doel '%s' bestaat niet.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Vereiste '%s' is nieuwer dan doel '%s'.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Vereiste '%s' is ouder dan doel '%s'.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "Doel '%s' is dubbeldubbelpunts en heeft geen vereisten.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "Er is geen recept voor '%s', en geen van de vereisten is veranderd.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Maken van '%s' vanwege 'always-make'-vlag.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "Doel '%s' hoeft niet opnieuw gemaakt te worden"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; VPATH-naam '%s' wordt gebruikt"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Doel '%s' moet opnieuw gemaakt worden.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  VPATH-naam '%s' wordt genegeerd.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Recept van '%s' wordt nu uitgevoerd.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Opnieuw maken van doelbestand '%s' is mislukt.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Doelbestand '%s' is met succes opnieuw gemaakt.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Doelbestand '%s' moet opnieuw worden gemaakt onder '-q'.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Standaardopdrachten worden gebruikt voor '%s'.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Waarschuwing: bestand '%s' heeft een wijzigingstijd in de toekomst"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr ""
 "Waarschuwing: bestand '%s' heeft een wijzigingstijd %s seconden in de "
 "toekomst"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ".LIBPATTERNS-element '%s' is geen patroon"
@@ -1813,7 +1794,7 @@ msgstr ".LIBPATTERNS-element '%s' is geen patroon"
 msgid "Customs won't export: %s\n"
 msgstr "Customs kan niet exporteren: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1821,7 +1802,7 @@ msgstr ""
 "\n"
 "# Impliciete regels"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1829,7 +1810,7 @@ msgstr ""
 "\n"
 "# Geen impliciete regels."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1838,11 +1819,11 @@ msgstr ""
 "\n"
 "# %u impliciete regels, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminal."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "PROGRAMMAFOUT: num_pattern_rules() is verkeerd!  %u != %u"
@@ -2006,7 +1987,7 @@ msgstr "Verzoek om informatie"
 msgid "Floating point co-processor not available"
 msgstr "Drijvendekomma-coprocessor is niet beschikbaar"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -2015,7 +1996,7 @@ msgstr ""
 "\n"
 "%s Geen 'strcache'-buffers\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2026,7 +2007,7 @@ msgstr ""
 "%s 'strcache'-buffers: %lu (%lu) / strings = %lu / opslag = %lu B / "
 "gemiddeld = %lu B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
@@ -2034,13 +2015,13 @@ msgstr ""
 "%s huidig buffer: grootte = %hu B / gebruikt = %hu B / aantal = %hu / "
 "gemiddeld = %hu B\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr ""
 "%s andere gebruikte: totaal = %lu B / aantal = %lu / gemiddeld = %lu B\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
@@ -2048,7 +2029,7 @@ msgstr ""
 "%s andere vrij: totaal = %lu B / max = %lu B / min = %lu B / gemiddeld = %hu "
 "B\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2057,7 +2038,7 @@ msgstr ""
 "\n"
 "%s 'strcache'-prestatie: lookups = %lu / treffersverhouding = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2065,44 +2046,44 @@ msgstr ""
 "# hashtabel-statistieken van bestanden:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automatisch"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "standaard"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "omgeving"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "Makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "omgeving onder -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "opdrachtregel"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "'override'-opdracht"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (uit '%s', regel %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# Statistieken van hashtabel van variabelenverzameling:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2110,7 +2091,7 @@ msgstr ""
 "\n"
 "# Variabelen\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2118,7 +2099,7 @@ msgstr ""
 "\n"
 "# Patroonspecifieke variabelewaarden"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2126,7 +2107,7 @@ msgstr ""
 "\n"
 "# Geen patroonspecifieke variabelewaarden"
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2145,89 +2126,39 @@ msgstr "Waarschuwing: ongedefinieerde variabele '%.*s'"
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() is mislukt met afsluitwaarde %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Waarschuwing: lege omleiding\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "*interne fout*: '%s' command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 "-waarschuwing: mogelijk dient u CTRL-Y-afhandeling opnieuw aan te zetten "
 "vanuit DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "INGEBOUWD [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "INGEBOUWDE CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "INGEBOUWDE CD %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Onbekende ingebouwde opdracht '%s'\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
+#: vmsjobs.c:1228
 #, c-format
-msgid "Error, empty command\n"
-msgstr "Fout: lege opdracht\n"
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Invoer wordt omgeleid van %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Foutuitvoer wordt omgeleid naar %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Uitvoer wordt toegevoegd aan %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Uitvoer wordt omgeleid naar %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Toevoegen van %.*s en opschoning\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "In plaats daarvan wordt %s uitgevoerd\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Fout bij proces-start, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2235,11 +2166,11 @@ msgstr ""
 "\n"
 "# VPATH-zoekpaden\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# Geen 'vpath'-zoekpaden."
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2248,7 +2179,7 @@ msgstr ""
 "\n"
 "# %u 'vpath'-zoekpaden.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2256,7 +2187,7 @@ msgstr ""
 "\n"
 "# Geen algemeen zoekpad ('VPATH'-variabele)."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2266,6 +2197,79 @@ msgstr ""
 "# Algemeen zoekpad ('VPATH'-variabele):\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Taakserver-plaatsen zijn beperkt tot %d\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "aanmaken van taakserver-semafoor: (Fout %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"*interne fout*: kan taakserver-semafoor '%s' niet openen: (Fout %ld: %s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Taakservercliënt (semafoor %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "vrijgeven van taakserver-semafoor: (Fout %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "wachten op semafoor of dochterproces: (Fout %ld: %s)"
+
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s: recept voor doel '%s' is mislukt"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] Fout 0x%x%s"
+
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Waarschuwing: lege omleiding\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "*interne fout*: '%s' command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "INGEBOUWD [%s][%s]\n"
+
+#~ msgid "BUILTIN ECHO %s->%s\n"
+#~ msgstr "INGEBOUWDE ECHO %s->%s\n"
+
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Onbekende ingebouwde opdracht '%s'\n"
+
+#~ msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+#~ msgstr ""
+#~ "Ingebouwde opdracht is onbekend of wordt niet ondersteund in .ONESHELL: "
+#~ "'%s'\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Fout: lege opdracht\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Invoer wordt omgeleid van %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Foutuitvoer wordt omgeleid naar %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Uitvoer wordt omgeleid naar %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Fout bij processtart, %d\n"
+
 #~ msgid "internal error: multiple --sync-mutex options"
 #~ msgstr "*interne fout*: meerdere opties '--sync-mutex'"
 
@@ -2321,9 +2325,6 @@ msgstr ""
 #~ "%sEr is GEEN garantie; zelfs niet voor VERHANDELBAARHEID of\n"
 #~ "%sGESCHIKTHEID VOOR EEN BEPAALD DOEL.\n"
 
-#~ msgid "extraneous `endef'"
-#~ msgstr "extra 'endef'"
-
 #~ msgid "empty `override' directive"
 #~ msgstr "lege 'override'-opdracht"
 
index f7eb848..1248613 100644 (file)
Binary files a/po/pl.gmo and b/po/pl.gmo differ
index 5476e85..6b5ec7d 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,15 +1,15 @@
 # Polish translation for GNU make.
-# Copyright (C) 1996, 2002, 2005, 2006, 2010, 2013 Free Software Foundation, Inc.
+# Copyright (C) 1996, 2002, 2005, 2006, 2010, 2013, 2014, 2016 Free Software Foundation, Inc.
 # This file is distributed under the same license as the make package.
 # Paweł Krawczyk <kravietz@ceti.pl>, 1996.
-# Jakub Bogusz <qboosh@pld-linux.org>, 2002-2013.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2002-2016.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: make 4.0\n"
+"Project-Id-Version: make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-10-13 10:48+0200\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-25 20:40+0200\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
 "Language: pl\n"
@@ -46,85 +46,85 @@ msgstr "touch: Brak elementu '%s' w '%s'"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: Błędny kod powrotu z ar_member_touch w '%s'"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 "Uzyskanie informacji o module przez lnr$set_module() nie udało się, status = "
 "%d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control() nie powiodło się, status = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "błąd otwarcia biblioteki '%s' podczas szukania elementu '%s'"
+msgstr "błąd otwarcia biblioteki '%s' podczas szukania stanu elementu %d"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Element '%s'%s: %ld bajtów pod %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (nazwa może zostać okrojona)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Data %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, mode = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "Polecenia mają za dużo linii (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Przerwano.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Element archiwum '%s' może być fałszywy; nie usunięty"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Element archiwum '%s' może być fałszywy; nie usunięty"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Kasuję plik '%s'"
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Kasuję plik '%s'"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  polecenia do wykonania"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (wbudowane):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (z '%s', linia %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -132,62 +132,62 @@ msgstr ""
 "\n"
 "# Katalogi\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: stat() zwraca błąd.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (klucz %s, czas modyfikacji %d): otwarcie było niemożliwe.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (urządzenie %d, i-węzeł [%d,%d,%d]): otwarcie było niemożliwe.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (urządzenie %ld, i-węzeł %ld): otwarcie było niemożliwe.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (klucz %s, czas modyfikacji %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (urządzenie %d, i-węzeł [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (urządzenie %ld, i-węzeł %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Nie"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " pliki, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "nie"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " niemożliwości"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " jak dotąd."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " niemożliwości w %lu katalogach.\n"
@@ -197,156 +197,156 @@ msgstr " niemożliwości w %lu katalogach.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Rekurencyjna zmienna '%s' wskazuje na samą siebie"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "niezakończone odwołanie do zmiennej"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Polecenia dla pliku '%s' podano w %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ""
 "Polecenia dla pliku '%s' zostały wyznaczone na podstawie reguł standardowych,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "ale '%s' jest teraz uznawany za ten sam plik co '%s'."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "Polecenia dla '%s' zostaną zignorowane na rzecz poleceń dla '%s'."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 "nie można przemianować '%s' z pojedynczym dwukropkiem na '%s' z podwójnym"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr ""
 "nie można przemianować '%s' z podwójnym dwukropkiem na '%s' z pojedynczym"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Kasowanie pliku pośredniego '%s'"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Kasowanie plików pośrednich...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Aktualny czas"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Oznaczenie czasu spoza zakresu; zastąpiono %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# To nie jest obiekt:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Cenny plik (zależność .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Obiekt niejawny (zależność .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Obiekt podany w linii poleceń."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Makefile domyślny, wymieniony w MAKEFILES lub -include/sinclude."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "#  Reguła wbudowana"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Szukanie reguł domyślnych zostało wykonane."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Szukanie reguł domyślnych nie zostało wykonane."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Gałąź wzorców domyślnych/statycznych: '%s'\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Plik jest zależnością przejściową."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Robi również:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Czas modyfikacji nie był sprawdzany."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Plik nie istnieje."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Plik jest bardzo stary."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Ostatnio modyfikowany %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Plik został uaktualniony."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Plik nie został uaktualniony."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Aktualnie uruchamiane polecenia (TO JEST BŁĄD)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Aktualnie uruchamiane polecenia zależności (TO JEST BŁĄD)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Uaktualnienie powiodło się."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Powinien być uaktualniony (-q jest włączone)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Uaktualnianie nie powiodło się."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Błędna wartość w elemencie 'command_state'!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -354,7 +354,7 @@ msgstr ""
 "\n"
 "# Pliki"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -364,105 +364,122 @@ msgstr ""
 "# statystyki tablic haszujących plików:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: Pole '%s' nie zapamiętane w pamięci podręcznej: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "pierwszy argument funkcji 'word' nie jest liczbowy"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "pierwszy argument funkcji 'word' musi być większy od 0"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "pierwszy argument funkcji 'wordlist' nie jest liczbowy"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "drugi argument funkcji 'wordlist' nie jest liczbowy"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(In) nie powiodło się (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(Err) nie powiodło się (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() nie powiodło się (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() nie powiodło się\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Czyszczę tymczasowy plik wsadowy %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "plik: brak nazwy"
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "otwarcie: %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "zapis: %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
+#, c-format
+msgid "close: %s: %s"
+msgstr "zamknięcie: %s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "plik: zbyt dużo argumentów"
+
+#: function.c:2262
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr "Błędna operacja na pliku: %s"
+msgid "read: %s: %s"
+msgstr "odczyt: %s: %s"
 
-#: function.c:2324
+#: function.c:2275
+#, c-format
+msgid "file: invalid file operation: %s"
+msgstr "plik: błędna operacja na pliku: %s"
+
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "niewystarczająca liczba argumentów (%d) dla funkcji '%s'"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "funkcja '%s' nie jest zaimplementowana na tej platformie"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "nie dokończone wywołanie funkcji '%s': brak '%c'"
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "Pusta nazwa funkcji\n"
+msgstr "Pusta nazwa funkcji"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "Błędna nazwa funkcji: %s\n"
+msgstr "Błędna nazwa funkcji: %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "Zbyt długa nazwa funkcji: %s\n"
+msgstr "Zbyt długa nazwa funkcji: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "Błędna minimalna liczba argumentów (%d) dla funkcji %s\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "Błędna minimalna liczba argumentów (%d) dla funkcji %s"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "Błędna maksymalna liczba argumentów (%d) dla funkcji %s\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "Błędna maksymalna liczba argumentów (%d) dla funkcji %s"
 
 #: getopt.c:659
 #, c-format
@@ -560,7 +577,7 @@ msgstr "Szukanie standardowej reguły dla '%s'.\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Szukanie standardowej reguły typu archive-member dla '%s'.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Pomijanie rekurencyjnego wywołania reguły standardowej.\n"
 
@@ -604,100 +621,76 @@ msgstr "Znaleziono zależność '%s' jako VPATH '%s'\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Szukanie reguły zawierającej plik przejściowy '%s'.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Nie można utworzyć pliku tymczasowego\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (zrzut pamięci)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (zignorowano)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<wbudowane>"
 
-#: job.c:503
+#: job.c:510
 #, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: polecenia dla obiektu '%s' nie powiodły się"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] Błąd %d%s"
 
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "%s[%s] Błąd %d%s"
-
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Błąd 0x%x%s"
-
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s]: %s%s%s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Oczekiwanie na niezakończone zadania...."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Żyjący potomek %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (zdalne)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Zbieranie przegrywającego potomka %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Zbieranie wygrywającego potomka %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Czyszczenie tymczasowego pliku wsadowego %s\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Czyszczenie tymczasowego pliku wsadowego %s nie powiodło się (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Usuwanie potomka %p PID %s%s z kolejki.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "zwalnianie semafora serwera zadań: (Błąd %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Zwolniony token dla potomka %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "piszący serwer zadań"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() nie mógł uruchomić procesu (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -706,97 +699,93 @@ msgstr ""
 "\n"
 "Naliczono %d parametrów nieudanego uruchomienia\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Wstawianie potomka %p (%s) PID %s%s do kolejki.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "oczekiwanie na semafor lub proces potomny: (Błąd %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Otrzymano token dla potomka %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "strumień czytający zadania"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: obiekt '%s' nie istnieje"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: uaktualnianie obiektu '%s' z powodu: %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "niemożliwe wymuszenie limitów obciążenia w tym systemie"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "niemożliwe wymuszenie limitu obciążenia: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "nie ma więcej uchwytów plików: nie można powielić stdin\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "nie ma więcej uchwytów plików: nie można powielić stdout\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "nie ma więcej uchwytów plików: nie można powielić stderr\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Nie można odtworzyć stdin\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Nie można odtworzyć stdout\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "Nie można odtworzyć stderr\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "make usunął potomka pid %s, nadal czeka na pid %s\n"
 
-#: job.c:2458
+#: job.c:2275
+#, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: Polecenie nie znalezione\n"
+
+#: job.c:2277
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: Polecenie nie znalezione"
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: Polecenie nie znalezione\n"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Nie znaleziono programu powłoki"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: mogło zabraknąć miejsca na środowisko"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL się zmienił (był '%s', jest '%s')\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Tworzenie tymczasowego pliku wsadowego %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -804,7 +793,7 @@ msgstr ""
 "Zawartość pliku wsadowego:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -813,7 +802,7 @@ msgstr ""
 "Zawartość pliku wsadowego:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (linia %d) Zły kontekst powłoki (!unixy && !batch_mode_shell)\n"
@@ -843,29 +832,29 @@ msgstr "Nie udało się wczytać symbolu %s z %s: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "Pusta nazwa symbolu do wczytania: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Wczytywanie symbolu %s z %s\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Operacja 'load' nie jest obsługiwana na tej platformie"
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Opcje:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Ignorowane dla kompatybilności.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 "  -B, --always-make           Bezwarunkowe utworzenie wszystkich obiektów.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -874,19 +863,19 @@ msgstr ""
 "                              Przejście do KATALOGu przed robieniem\n"
 "                              czegokolwiek.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr ""
 "  -d                          Wyświetla dużo informacji diagnostycznych.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=FLAGI]             Wyświetla różne rodzaje informacji\n"
 "                              diagnostycznych.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -894,14 +883,14 @@ msgstr ""
 "  -e, --environment-overrides\n"
 "                              Zmienne środowiska przykrywają makefile.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "  --eval=ŁAŃCUCH              Wyznacza ŁAŃCUCH jako instrukcję pliku "
 "makefile.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -909,16 +898,16 @@ msgstr ""
 "  -f PLIK, --file=PLIK, --makefile=PLIK\n"
 "                              Czyta PLIK jako makefile.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr ""
 "  -h, --help                  Wyświetla ten komunikat i kończy działanie.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr "  -i, --ignore-errors         Ignoruje błędy poleceń.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -926,7 +915,7 @@ msgstr ""
 "  -I KATALOG, --include-dir=KATALOG\n"
 "                              Szuka dołączanych makefile w KATALOGu.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -934,14 +923,14 @@ msgstr ""
 "  -j [N], --jobs[=N]          Dopuszcza N zadań naraz; brak N oznacza brak\n"
 "                              ograniczeń.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Kontynuuj jeśli nie da się zrobić jakichś\n"
 "                              obiektów.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -952,7 +941,7 @@ msgstr ""
 "jest\n"
 "                              poniżej N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -960,7 +949,7 @@ msgstr ""
 "  -L, --check-symlink-times   Używanie ostatniego mtime między dowiązaniem a "
 "celem.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -969,7 +958,7 @@ msgstr ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Nie wykonuje poleceń; jedynie je wyświetla.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -980,7 +969,7 @@ msgstr ""
 "go\n"
 "                              ponownie.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -989,11 +978,11 @@ msgstr ""
 "                              Sposób synchronizacji wyjścia zadań "
 "równoległych.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       Wyświetla wewnętrzną bazę danych make.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1001,20 +990,20 @@ msgstr ""
 "  -q, --question              Nie uruchamia żadnych poleceń; status powrotu\n"
 "                              wskazuje aktualność.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr "  -r, --no-builtin-rules      Wyłącza wbudowane reguły standardowe.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables  Wyłącza ustawianie wbudowanych zmiennych.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Nie wypisuje poleceń.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1022,25 +1011,25 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Wyłącza -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr "  -t, --touch                 Uaktualnia obiekty zamiast je robić.\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                     Wypisywanie informacji ze śledzenia.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 "  -v, --version               Wyświetla wersję make i kończy działanie.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Wyświetla aktualny katalog.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1048,7 +1037,7 @@ msgstr ""
 "  --no-print-directory        Wyłącza -w, nawet jeśli było ono włączone\n"
 "                              domyślnie.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1056,7 +1045,7 @@ msgstr ""
 "  -W PLIK, --what-if=PLIK, --new-file=PLIK, --assume-new=PLIK\n"
 "                              Uznaje PLIK za nieskończenie nowy.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1065,26 +1054,26 @@ msgstr ""
 "niezdefiniowanych\n"
 "                              zmiennych.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "pusty łańcuch nie może być nazwą pliku"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "nieznany poziom diagnostyki '%s'"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "nieznany sposób synchronizacji wyjścia '%s'"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: złapano przerwanie/wyjątek (kod = 0x%lx, adres = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1099,179 +1088,134 @@ msgstr ""
 "ExceptionFlags = %lx\n"
 "ExceptionAddress = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Naruszenie praw dostępu: zapis pod adresem 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Naruszenie praw dostępu: odczyt spod adresu 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() ustawia default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "find_and_set_shell() ustawia ścieżkę wyszukiwania default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s jest zawieszony na 30 sekund..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "zakończono sleep(30). Kontynuacja.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-"błąd wewnętrzny: nie udało się otworzyć semafora serwera zadań '%s': (Błąd "
-"%ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Klient serwera zadań (semafor %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "błąd wewnętrzny: błędny łańcuch --jobserver-fds '%s'"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Klient serwera zadań (fds %d,%d)\n"
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr "uwaga: -jN wymuszone w podzadaniu: wyłączanie trybu serwera zadań."
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "duplikacja serwera zadań"
-
-#: main.c:1570
+#: main.c:1627
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
 "uwaga: serwer zadań niedostępny: użycie -j1. Należy dodać `+' do nadrzędnej "
 "reguły make."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr "uwaga: -jN wymuszone w podzadaniu: wyłączanie trybu serwera zadań."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefile ze standardowego wejścia podano dwukrotnie."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (plik tymczasowy)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (plik tymczasowy)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Równoległe zadania (-j) nie są obsługiwane na tej platformie"
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Przełączanie w tryb jednozadaniowy (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Pojemność serwera zadań ograniczona do %d\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "tworzenie semafora serwera zadań: (Błąd %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "tworzenie potoku zadań"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "inicjowanie potoku serwera zadań"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Dowiązania symboliczne nie są obsługiwane: wyłączono -L."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Uaktualnianie plików makefile....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "Plik makefile '%s' może się zapętlić; bez ponownego przetwarzania.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Nie udało się ponownie przetworzyć pliku makefile '%s'."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Nie znaleziono włączanego pliku makefile '%s'."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Nie znaleziono pliku makefile '%s'"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Niemożliwy powrót do katalogu startowego."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Ponowne uruchamianie[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (plik tymczasowy): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL zawiera więcej niż jeden cel"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Nie podano obiektów i nie znaleziono makefile"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Brak obiektów"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Uaktualnianie obiektów docelowych....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr "uwaga:  Wykryto przestawienie zegara. Budowanie może być niekompletne."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Składnia: %s [opcje] [obiekt] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1280,7 +1224,7 @@ msgstr ""
 "\n"
 "Ten program został zbudowany dla %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1289,32 +1233,32 @@ msgstr ""
 "\n"
 "Ten program został zbudowany dla %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Błędy proszę zgłaszać na adres <bug-make@gnu.org>\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "opcja '%s%s' wymaga niepustego łańcucha jako argumentu"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "opcja '-%c' wymaga argumentu będącego liczbą całkowitą dodatnią"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sTen program został zbudowany dla systemu %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sTen program został zbudowany dla systemu %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1328,7 +1272,7 @@ msgstr ""
 "rozpowszechniać.\n"
 "%sNie ma ŻADNEJ GWARANCJI w zakresie dopuszczalnym przez prawo.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1337,7 +1281,7 @@ msgstr ""
 "\n"
 "# Baza danych Make, wyświetlana na %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1346,29 +1290,29 @@ msgstr ""
 "\n"
 "# Zakończono tworzenie bazy danych Make na %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Nieznany błąd %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: użytkownik %lu (rzeczywisty %lu), grupa %lu (rzeczywista %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Zainicjalizowany dostęp"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Dostęp użytkownika"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Dostęp make"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Dostęp potomka"
 
@@ -1413,9 +1357,8 @@ msgid "%s[%u]: Leaving directory '%s'\n"
 msgstr "%s[%u]: Opuszczenie katalogu '%s'\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "błąd zapisu: %s"
+msgstr "błąd zapisu: standardowe wyjście"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1431,225 +1374,260 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "tworzenie potoku zadań"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "duplikowanie potoku zadań"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "inicjowanie potoku serwera zadań"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "błąd wewnętrzny: błędny łańcuch --jobserver-auth '%s'"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Klient serwera zadań (fds %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "potok serwera zadań"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "zapis do serwera zadań"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "pselect potoku zadań"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "odczyt potoku zadań"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Czytanie makefile...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "Czytanie pliku makefile '%s'"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (brak celu domyślnego)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (przeszukiwana ścieżka)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (nieważne)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (brak rozszerzenia ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "Pominięto BOM UTF-8 w pliku makefile '%s'\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "Pominięto BOM UTF-8 w buforze pliku makefile\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "błędna składnia wyrażenia warunkowego"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: nie udało się załadować"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "polecenia zaczynają się przed pierwszym obiektem"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "brakuje reguły przed poleceniami"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (czyżby miał być TAB zamiast 8 spacji?)"
+msgstr "brakujący separator (czyżby miał być TAB zamiast 8 spacji?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "brakujący separator%s"
+msgstr "brakujący separator"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "brakujący wzorzec obiektu"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "wielokrotne wzorce obiektu"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "wzorzec obiektu nie zawiera '%%'"
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "brakujący 'endif'"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "pusta nazwa zmiennej"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "nadmiarowy tekst po dyrektywie 'define'"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "brakujący 'endef', niezakończone 'define'"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "nadmiarowy tekst po dyrektywie 'endef'"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "niezwiązany tekst po dyrektywie '%s'"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "nadmiarowy '%s'"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "tylko jedno 'else' w wyrażeniu warunkowym"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Źle sformułowana definicja zmiennej dla celu"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "wymagania nie mogą być definiowane w opisach poleceń"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "pomieszane standardowe i statyczne reguły wzorców"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "pomieszane standardowe i normalne reguły"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "obiekt '%s' nie pasuje do wzorca obiektu"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "plik obiektu '%s' ma pozycje i : i ::"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "obiekt '%s' podany wielokrotnie w tej samej regule"
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "uwaga: polecenia zakrywające dla obiektu '%s'"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "uwaga: ignoruję stare polecenia dla obiektu '%s'"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "pomieszane standardowe i normalne reguły"
+msgstr "*** pomieszane reguły standardowe i normalne: przestarzała składnia"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "uwaga: napotkałem na znak NUL; reszta linii zignorowana"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Nie ma nic do zrobienia w '%s'."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "'%s' jest aktualne."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Czyszczenie pliku '%s'.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%sBrak reguł do zrobienia obiektu '%s', wymaganego przez '%s'%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sBrak reguł do wykonania obiektu '%s'%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Przetwarzanie pliku obiektowego '%s'.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Już bez powodzenia próbowałem uaktualnić plik '%s'.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Plik '%s' był już przetwarzany.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Wciąż uaktualniam plik '%s'.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Skończyłem uaktualniać plik '%s'.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Plik '%s' nie istnieje.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1657,138 +1635,138 @@ msgstr ""
 "*** Uwaga: plik .LOW_RESOLUTION_TIME '%s' ma dużą rozdzielczość znacznika "
 "czasu"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Znaleziono standardową regułę dla '%s'.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Brak standardowych reguł dla '%s'.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Stosowanie standardowych poleceń dla '%s'.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Okrężna dyrektywa %s <- %s porzucona."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Zakończono zależności pliku obiektu '%s'.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Zależności '%s' są wykonywane.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Zaniechany plik obiektowy '%s'.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Obiekt '%s' nie został ponownie wykonany z powodu błędów."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Zależność '%s' dotyczy tylko kolejności dla obiektu '%s'.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Zależność '%s' obiektu '%s' nie istnieje.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Zależność '%s' jest nowsza od obiektu '%s'.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Zależność '%s' jest starsza od obiektu '%s'.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr ""
 "Obiekt '%s' jest z podwójnym dwukropkiem i nie ma żadnych zależności.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "Brak poleceń dla '%s' i brak zmienionych zależności.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Tworzenie '%s' z powodu flagi always-make.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "Nie ma potrzeby ponownego robienia obiektu '%s'"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; użyto nazwy VPATH '%s'"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Konieczne ponowne wykonanie obiektu '%s'.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  Zignorowano nazwę VPATH '%s'.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Uruchomiono polecenia dla '%s'.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Ponowne tworzenie pliku obiektu '%s' nie powiodło się.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Ponowne tworzenie pliku obiektu '%s' powiodło się.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Plik obiektu '%s' powinien być ponownie tworzony z opcją -q.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Stosowanie standardowych poleceń dla '%s'.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Uwaga: Plik '%s' ma czas modyfikacji z przyszłości"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Uwaga: Plik '%s' ma czas modyfikacji %s s w przyszłości"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "Element .LIBPATTERNS '%s' nie jest wzorcem"
@@ -1798,7 +1776,7 @@ msgstr "Element .LIBPATTERNS '%s' nie jest wzorcem"
 msgid "Customs won't export: %s\n"
 msgstr "Zasady nie eksportowane: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1806,7 +1784,7 @@ msgstr ""
 "\n"
 "# Reguły stadardowe"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1814,7 +1792,7 @@ msgstr ""
 "\n"
 "# Brak standardowych reguł."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1823,11 +1801,11 @@ msgstr ""
 "\n"
 "# %u standardowych reguł, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminal."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "BŁĄD: złe num_pattern_rules! %u != %u"
@@ -1988,7 +1966,7 @@ msgstr "Żądanie informacji"
 msgid "Floating point co-processor not available"
 msgstr "Koprocesor obliczeń zmiennoprzecinkowych niedostępny"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -1997,7 +1975,7 @@ msgstr ""
 "\n"
 "%s Brak buforów strcache\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2008,26 +1986,26 @@ msgstr ""
 "%s bufory strcache: %lu (%lu) / łańcuchów = %lu / miejsce = %lu B / śr = %lu "
 "B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 "%s bieżący buf: rozmiar = %hu B / użyty = %hu B / liczba = %hu / śr = %hu B\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s pozostałe użyte: razem = %lu B / liczba = %lu / śr = %lu B\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 "%s pozostałe wolne: razem = %lu B / maks = %lu B / min = %lu B / śr = %hu B\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2036,7 +2014,7 @@ msgstr ""
 "\n"
 "%s wydajność strcache: wyszukiwań = %lu / wsp. trafień = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2044,44 +2022,44 @@ msgstr ""
 "# statystyki tablic haszujących:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automatyczna"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "domyślna"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "środowiskowa"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "środowisko pod -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "z linii poleceń"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "dyrektywa 'override'"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (z '%s', linia %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# statystyki tablic haszujących ustawionych zmiennych:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2089,7 +2067,7 @@ msgstr ""
 "\n"
 "# Zmienne\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2097,7 +2075,7 @@ msgstr ""
 "\n"
 "# Wartości zmiennych dla wzorca"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2105,7 +2083,7 @@ msgstr ""
 "\n"
 "# Brak wartości zmiennych dla wzorca."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2124,87 +2102,37 @@ msgstr "uwaga: niezdefiniowana zmienna '%.*s'"
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() nie powiodło się - %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Uwaga: Puste przekierowanie\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "błąd wewnętrzny: command_state '%s'"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr "-uwaga, będzie trzeba ponownie umożliwić obsługę CTRL-Y z DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "WBUDOWANE [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "WBUDOWANE CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "WBUDOWANE CD %s\n"
-
-#: vmsjobs.c:505
+#: vmsjobs.c:1228
 #, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Nieznane polecenie wbudowane '%s'\n"
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Błąd, puste polecenie\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Przekierowane wejście z %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Przekierowane wyjście diagnostyczne do %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Dołączanie wyjścia do %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Przekierowane wyjście do %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Dołączanie %.*s i czyszczenie\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Zamiast tego wykonywanie %s\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Błąd podczas uruchamiania, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2212,11 +2140,11 @@ msgstr ""
 "\n"
 "# Ścieżki przeszukiwania VPATH\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# Brak ścieżek przeszukiwania 'vpath'"
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2225,7 +2153,7 @@ msgstr ""
 "\n"
 "# %u ścieżek przeszukiwania 'vpath'.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2233,7 +2161,7 @@ msgstr ""
 "\n"
 "# Brak ogólnej (zmienna 'VPATH') ścieżki przeszukiwania."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2243,17 +2171,35 @@ msgstr ""
 "# Ogólna (zmienna 'VPATH') ścieżka przeszukiwania:\n"
 "# "
 
-#~ msgid "internal error: multiple --sync-mutex options"
-#~ msgstr "błąd wewnętrzny: wiele opcji --sync-mutex"
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Pojemność serwera zadań ograniczona do %d\n"
 
-#~ msgid "internal error: multiple --jobserver-fds options"
-#~ msgstr "błąd wewnętrzny: wiele opcji --jobserver-fds"
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "tworzenie semafora serwera zadań: (Błąd %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"błąd wewnętrzny: nie udało się otworzyć semafora serwera zadań '%s': (Błąd "
+"%ld: %s)"
 
-#~ msgid "virtual memory exhausted"
-#~ msgstr "brak pamięci wirtualnej"
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Klient serwera zadań (semafor %s)\n"
 
-#~ msgid "write error"
-#~ msgstr "błąd zapisu"
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "zwalnianie semafora serwera zadań: (Błąd %ld: %s)"
 
-#~ msgid "BUILTIN RM %s\n"
-#~ msgstr "WBUDOWANE RM %s\n"
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "oczekiwanie na semafor lub proces potomny: (Błąd %ld: %s)"
index 8dc66ef..37b59a5 100644 (file)
Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ
index 9013dec..0e2d304 100644 (file)
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU make 3.82\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
 "PO-Revision-Date: 2013-01-09 23:04-0300\n"
 "Last-Translator: Fábio Henrique F. Silva <fabiohfs@netscape.net>\n"
 "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
@@ -53,83 +53,83 @@ msgstr "touch: O membro `%s' n
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: O ar_member_touch retornou um código de erro inválido em `%s'"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr "o lbr$set_module() falhou ao obter informações do módulo, estado = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control() falhou com estado = %d"
 
-#: arscan.c:255
+#: arscan.c:261
 #, fuzzy, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr "erro na abertura da biblioteca `%s' para localizar o membro `%s'"
 
-#: arscan.c:944
+#: arscan.c:965
 #, fuzzy, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Membro `%s'%s: %ld bytes de %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (o nome pode estar truncado)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Data %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, modo = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr ""
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Quebra.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, fuzzy, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "** [%s] O arquivo membro `%s' pode ser falso. Não foi apagado."
 
-#: commands.c:633
+#: commands.c:631
 #, fuzzy, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "** O arquivo membro `%s' pode ser falso. Não foi apagado."
 
-#: commands.c:647
+#: commands.c:645
 #, fuzzy, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "** [%s] Apagando arquivo `%s'"
 
-#: commands.c:649
+#: commands.c:647
 #, fuzzy, c-format
 msgid "*** Deleting file '%s'"
 msgstr "** Apagando arquivo `%s'"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "# comandos a executar"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (embutido):"
 
-#: commands.c:690
+#: commands.c:688
 #, fuzzy, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (de `%s', linha %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -137,62 +137,62 @@ msgstr ""
 "\n"
 "# Diretórios\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: não pôde ser estabelecido.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (chave %s, mtime %d): não pôde ser aberto.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (dispositivo %d, inode [%d,%d,%d]): não pôde ser aberto.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (dispositivo %ld, inode %ld): não pôde ser aberto.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (chave %s, mtime %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (dispositivo %d, inode [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (dispositivo %ld, inode %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Não"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " arquivos, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "não"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " impossibilidades"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " até agora."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " impossibilidades em %lu diretórios.\n"
@@ -202,158 +202,158 @@ msgstr " impossibilidades em %lu diret
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Variável recursiva `%s' faz referência a ela mesma (eventualmente)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "referência a variável não finalizada"
 
-#: file.c:271
+#: file.c:278
 #, fuzzy, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Os comandos especificados para o arquivo `%s' em %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, fuzzy, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ""
 "Os comandos para o arquivo `%s' foram encontrados por uma regra implícita,"
 
-#: file.c:280
+#: file.c:287
 #, fuzzy, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "mas `%s' é considerado o mesmo arquivo que `%s'."
 
-#: file.c:283
+#: file.c:290
 #, fuzzy, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "Os comandos para `%s' serão ignorados em favor daqueles para `%s'."
 
-#: file.c:303
+#: file.c:310
 #, fuzzy, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "não pôde renomear de dois-pontos `%s' para dois-pontos duplos `%s'"
 
-#: file.c:309
+#: file.c:316
 #, fuzzy, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "não pôde renomer de dois-pontos duplos `%s' para dois-pontos `%s'"
 
-#: file.c:401
+#: file.c:408
 #, fuzzy, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "** Apagando arquivo intermediário `%s'"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Apagando arquivo intermediário...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Hora atual"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Data/Hora fora de faixa; substituindo %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Não é um alvo:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "# Arquivo importante (prerequisito de .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "# Alvo Falso (prerequisito de .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "# Linha de Comando do Alvo."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "# Um Padrão, arquivo MAKEFILES ou -include/sinclude makefile."
 
-#: file.c:968
+#: file.c:975
 #, fuzzy
 msgid "#  Builtin rule"
 msgstr ""
 "\n"
 "# Faltam as regras implícitas."
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "# Pesquisa por regra implícita concluida."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "# Pesquisa por regra implícita não concluida."
 
-#: file.c:973
+#: file.c:980
 #, fuzzy, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "# Derivação padrão implícita/estática: `%s'\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "# O arquivo é um pré-requisito intermediário."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "# Também faz:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "# O Período da modificação nunca foi verificado."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "# O Arquivo não existe."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "# O Arquivo está desatualizado."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "# Última modificação %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "# O Arquivo foi atualizado."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "# O Arquivo não foi atualizado."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "# Comandos em execução (ISTO É UMA FALHA)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "# Comandos de dependências em execução (ISTO É UMA FALHA)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "# Atualizado com sucesso."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "# Precisa ser atualizado (-q está definido)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "# Problemas com a atualização."
 
-#: file.c:1025
+#: file.c:1032
 #, fuzzy
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "# Valor inválido no membro `command_state' !"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -361,7 +361,7 @@ msgstr ""
 "\n"
 "# Arquivos"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -371,107 +371,125 @@ msgstr ""
 "# tabela hash de arquivos:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr ""
 
-#: function.c:780
+#: function.c:790
 #, fuzzy
 msgid "non-numeric first argument to 'word' function"
 msgstr "primeiro argumento não numérico para a função `word'"
 
-#: function.c:785
+#: function.c:795
 #, fuzzy
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "o primeiro argumento para a função `word' deve ser maior que 0"
 
-#: function.c:805
+#: function.c:815
 #, fuzzy
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "primeiro argumento não numérico para a função `wordlist'"
 
-#: function.c:807
+#: function.c:817
 #, fuzzy
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "segundo argumento não numérico para a função `wordlist'"
 
-#: function.c:1499
+#: function.c:1525
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe(): DuplicateHandle(In) falhou (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_open_pipe(): DuplicateHandle(Err) falhou (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() falhou (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() falhou\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Apagando o arquivo de lote temporário %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, fuzzy, c-format
 msgid "open: %s: %s"
 msgstr "%s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, fuzzy, c-format
 msgid "write: %s: %s"
 msgstr "Erro de gravação: %s"
 
-#: function.c:2209
-#, c-format
-msgid "Invalid file operation: %s"
+#: function.c:2230 function.c:2267
+#, fuzzy, c-format
+msgid "close: %s: %s"
+msgstr "%s%s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
 msgstr ""
 
-#: function.c:2324
+#: function.c:2262
+#, fuzzy, c-format
+msgid "read: %s: %s"
+msgstr "%s: %s"
+
+#: function.c:2275
+#, fuzzy, c-format
+msgid "file: invalid file operation: %s"
+msgstr "%s: a opção é inválida -- %c\n"
+
+#: function.c:2390
 #, fuzzy, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "O número de argumentos é insuficiente (%d) para a função `%s' "
 
-#: function.c:2336
+#: function.c:2402
 #, fuzzy, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "A função `%s' não foi implementada nesta plataforma "
 
-#: function.c:2399
+#: function.c:2466
 #, fuzzy, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "Chamada não terminada para a função `%s': faltando `%c'"
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
 msgstr ""
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
 msgstr ""
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
 msgstr ""
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
+msgid "Invalid minimum argument count (%u) for function %s"
 msgstr "O número de argumentos é insuficiente (%d) para a função `%s' "
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
+msgid "Invalid maximum argument count (%u) for function %s"
 msgstr "O número de argumentos é insuficiente (%d) para a função `%s' "
 
 #: getopt.c:659
@@ -569,7 +587,7 @@ msgstr "Procurando por uma regra impl
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Procurando por uma regra implícita de arquivo-membro para `%s'.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Evitando recursão em regra implícita.\n"
 
@@ -613,102 +631,78 @@ msgstr "Pr
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Procurando uma regra com o arquivo intermediário `%s'.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Não foi possível criar um arquivos temporário\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (arquivo core criado)"
 
-#: job.c:488
+#: job.c:490
 #, fuzzy
 msgid " (ignored)"
 msgstr "[%s] Erro %d (ignorado)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 #, fuzzy
 msgid "<builtin>"
 msgstr " (embutido):"
 
-#: job.c:503
-#, fuzzy, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "aviso: sobreescrevendo os comandos para o alvo `%s'"
-
-#: job.c:516 job.c:524
+#: job.c:510
 #, fuzzy, c-format
-msgid "%s[%s] Error %d%s"
+msgid "%s[%s: %s] Error %d%s"
 msgstr "** [%s] Erro %d"
 
-#: job.c:519
-#, fuzzy, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "*** [%s] Erro 0x%x"
-
-#: job.c:529
-#, fuzzy, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s%s: %s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "** Esperando que outros processos terminem."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Filho ativo %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (remoto)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Descarregando processo filho %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Descarregando processo filho %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Apagando o arquivo de lote temporário: %s\n"
 
-#: job.c:855
+#: job.c:845
 #, fuzzy, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Apagando o arquivo de lote temporário: %s\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Removendo o processo filho %p PID %s%s da cadeia.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Liberado sinalizador para o processo filho %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "gravar jobserver"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() falhou ao executar o processo (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -717,99 +711,95 @@ msgstr ""
 "\n"
 "Contados %d args na falha de execução\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Colocando o processo filho %p (%s) PID %s%s na cadeia.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Obtido o sinalizador para o processo filho %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "tarefas canalizadas lidas"
-
-#: job.c:2056
+#: job.c:1838
 #, fuzzy, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "touch: Arquivo `%s' não existe"
 
-#: job.c:2059
+#: job.c:1841
 #, fuzzy, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%sSem regra para processar o alvo `%s', necessário por `%s'%s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "não pôde forçar os limites de carga neste sistema operacional"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "não pôde forçar a carga limite:"
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "sem manipuladores de arquivos: não é possível duplicar stdin\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "sem manipuladores de arquivos: não é possível duplicar stdout\n"
 
-#: job.c:2278
+#: job.c:2074
 #, fuzzy
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "sem manipuladores de arquivos: não é possível duplicar stdin\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Não é possível restaurar stdin\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Não é possível restaurar stdout\n"
 
-#: job.c:2309
+#: job.c:2105
 #, fuzzy
 msgid "Could not restore stderr\n"
 msgstr "Não é possível restaurar stdin\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "processo filho descarregado: pid %s, aguardando pelo pid %s\n"
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: Comando não encontrado"
+
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
 msgstr "%s: Comando não encontrado"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Interpretador de comandos não encontrado"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: o espaço de ambiente pode estar cheio"
 
-#: job.c:2765
+#: job.c:2584
 #, fuzzy, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL alterado (era `%s' e agora é `%s')\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Criando arquivo de lote temporário %s\n"
 
-#: job.c:3206
+#: job.c:3030
 #, fuzzy
 msgid ""
 "Batch file contents:\n"
@@ -818,7 +808,7 @@ msgstr ""
 "Conteúdo do arquivo de lote:%s\n"
 "\t%s\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -827,7 +817,7 @@ msgstr ""
 "Conteúdo do arquivo de lote:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (linha %d) contexto inválido (!unixy && !batch_mode_shell)\n"
@@ -856,30 +846,30 @@ msgstr ""
 msgid "Empty symbol name for load: %s"
 msgstr ""
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr ""
 
-#: load.c:244
+#: load.c:256
 #, fuzzy
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Tarefas paralelas (-j) não são suportadas nesta plataforma."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Opções:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr " -b, -m                      Ignorado para compatibilidade.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 " -B, --always-make           Processa todos os alvos incondicionalmente.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -887,18 +877,18 @@ msgstr ""
 " -C DIRETÓRIO, --directory=DIRETÓRIO\n"
 "                              Muda para o DIRETÓRIO antes de fazer algo.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr " -d                          Imprime muita informação de depuração.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 " --debug[=OPÇÕES]            Imprime vários tipos de informações de "
 "depuração.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -906,14 +896,14 @@ msgstr ""
 " -e, --environment-overrides\n"
 "                              Assume os valores das variáveis de ambiente.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "  --eval=STRING               Avalia a STRING como uma declaração para um "
 "makefile.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -921,15 +911,15 @@ msgstr ""
 " -f ARQUIVO, --file=ARQUIVO, --makefile=ARQUIVO\n"
 "                              Lê o ARQUIVO como se fosse um arquivo make.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr " -h, --help                   Imprime esta mensagem e sai.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr " -i, --ignore-errors         Ignora os erros dos comandos.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -938,7 +928,7 @@ msgstr ""
 "                              Pesquisa o DIRETÒRIO por arquivos make a "
 "incluir.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -946,14 +936,14 @@ msgstr ""
 " -j [N], --jobs[=N]          Permite N tarefas de uma vez; tarefas infinitas "
 "sem argumentos.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 " -k, --keep-going            Continua mesmo que alguns alvos não possam ser "
 "processados.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -963,7 +953,7 @@ msgstr ""
 "                              Não inicia múltiplas tarefas a menos que a "
 "carga seja menor que N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -971,7 +961,7 @@ msgstr ""
 "-L, --check-symlink-times  Usa o tempo mais antigo entre o vínculo simbólico "
 "e o alvo.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -981,7 +971,7 @@ msgstr ""
 "                              Não executa quaisquer comandos; apenas imprime-"
 "os.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -991,18 +981,18 @@ msgstr ""
 "                              Considera o ARQUIVO como muito antigo e não "
 "reprocessá-o.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr ""
 " -p, --print-data-base       Imprime o banco de dados interno do make.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1010,21 +1000,21 @@ msgstr ""
 " -q, --question              Não executa os comandos; O código de saida "
 "indica se está atualizado.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr " -r, --no-builtin-rules      Desabilita as regras implícitas.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 " -R, --no-builtin-variables  Desabilita a configuração das variáveis "
 "embutidas.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr " -s, --silent, --quiet       Não ecoa os comandos.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1032,28 +1022,28 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Desativa a opção -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 " -t, --touch                 Executa um `touch' nos alvos ao invés de "
 "reprocessá-los.\n"
 
-#: main.c:373
+#: main.c:398
 #, fuzzy
 msgid "  --trace                     Print tracing information.\n"
 msgstr " -d                          Imprime muita informação de depuração.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 " -v, --version               Imprime o número de versão do make e sai.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr " -w, --print-directory       Imprime o diretório atual.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1061,7 +1051,7 @@ msgstr ""
 " --no-print-directory        Desativa a opção -w, mesmo que ela esteja "
 "implicitamente ativada.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1069,7 +1059,7 @@ msgstr ""
 " -W ARQUIVO, --what-if=ARQUIVO, --new-file=ARQUIVO, --assume-new=ARQUIVO\n"
 "                              Considera o ARQUIVO infinitamente novo.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1077,26 +1067,26 @@ msgstr ""
 " --warn-undefined-variables  Avisa quando um variável não definida for "
 "referenciada.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "Cadeia de caracteres vazia não é válida como nome de arquivo"
 
-#: main.c:737
+#: main.c:766
 #, fuzzy, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "nível de depuração desconhecido: `%s'"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr ""
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: Interrupção/Exceção capturada (código = 0x%lx, endereço = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1111,176 +1101,133 @@ msgstr ""
 "SinalExceção = %lx\n"
 "EndereçoExceção = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Violação de acesso: operação de escrita no endereço 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Violação de acesso: operação de leitura no endereço 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() definiu o default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "find_and_set_shell(), caminho de pesquisa do default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s está suspenso por 30 segundos..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "sleep(30) concluido. Continuando.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-
-#: main.c:1530
-#, fuzzy, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Cliente Jobserver (fds %d,%d)\n"
-
-#: main.c:1534
-#, fuzzy, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "erro interno: valor `%s' inválido para --jobserver-fds"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Cliente Jobserver (fds %d,%d)\n"
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr "aviso: -jN forçado no submake: desabilitando o modo jobserver."
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "dup jobserver"
-
-#: main.c:1570
+#: main.c:1627
 #, fuzzy
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr "aviso: jobserver indisponível: usando -j1. Inclua `+' na regra pai."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr "aviso: -jN forçado no submake: desabilitando o modo jobserver."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefile na entrada padrão especificado duas vezes."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (arquivo temporário)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (arquivo temporário)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Tarefas paralelas (-j) não são suportadas nesta plataforma."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Reiniciando no modo de tarefa única (-j1)."
 
-#: main.c:1994
-#, fuzzy, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Cliente Jobserver (fds %d,%d)\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "criando canalização de tarefas"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "inicializando a canalização do jobserver"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Vínculos simbólicos não são suportados: desabilite -L."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Atualizando os arquivos makefiles ...\n"
 
-#: main.c:2158
+#: main.c:2195
 #, fuzzy, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "O arquivo `%s' pode estar em loop; não reprocessá-lo.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, fuzzy, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Problemas ao reprocessar o arquivo `%s'."
 
-#: main.c:2257
+#: main.c:2303
 #, fuzzy, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Arquivo `%s' incluido não foi encontrado."
 
-#: main.c:2262
+#: main.c:2308
 #, fuzzy, c-format
 msgid "Makefile '%s' was not found"
 msgstr "O arquivo `%s' não foi encontrado."
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Não foi possível voltar ao diretório original."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Re-executando[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "desvinculado (arquivos temporário): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ". DEFAULT_GOAL contém mais do que um alvo"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Nenhum alvo indicado e nenhum arquivo make encontrado"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Sem alvo"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Atualizando os objetivos finais...\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr "aviso: O relógio está errado. Sua compilação pode ficar incompleta."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Uso: %s [opções] [alvo] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1289,7 +1236,7 @@ msgstr ""
 "\n"
 "Este programa foi compilado para %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1298,32 +1245,32 @@ msgstr ""
 "\n"
 "Este programa foi compilado para %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Informe os problemas para <bug-make@gnu.org>.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, fuzzy, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "a opção `%s%s' requer um argumento não vazio"
 
-#: main.c:2871
+#: main.c:2933
 #, fuzzy, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "a opção `-%c' requer um argumento inteiro positivo"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sCompilado para %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sCompilado para %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1337,7 +1284,7 @@ msgstr ""
 "livremente.\n"
 "%sNÃO HÁ GARANTIAS, exceto o que for permitido por lei.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1346,7 +1293,7 @@ msgstr ""
 "\n"
 "# Banco de dados do Make, impresso em %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1355,29 +1302,29 @@ msgstr ""
 "\n"
 "# Banco de dados do Make finalizado em %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Erro desconhecido %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: usuário %lu (real %lu), grupo %lu (real %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Acesso inicializado"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Acesso do usuário"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Acesso do make"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Acesso filho"
 
@@ -1440,230 +1387,271 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "criando canalização de tarefas"
+
+#: posixos.c:72 posixos.c:227
+#, fuzzy
+msgid "duping jobs pipe"
+msgstr "criando canalização de tarefas"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "inicializando a canalização do jobserver"
+
+#: posixos.c:90
+#, fuzzy, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "erro interno: valor `%s' inválido para --jobserver-fds"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Cliente Jobserver (fds %d,%d)\n"
+
+#: posixos.c:109
+#, fuzzy
+msgid "jobserver pipeline"
+msgstr "inicializando a canalização do jobserver"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "gravar jobserver"
+
+#: posixos.c:268
+#, fuzzy
+msgid "pselect jobs pipe"
+msgstr "tarefas canalizadas lidas"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "tarefas canalizadas lidas"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Lendo arquivos makefile ...\n"
 
-#: read.c:335
+#: read.c:329
 #, fuzzy, c-format
 msgid "Reading makefile '%s'"
 msgstr "Lendo arquivos makefile `%s'"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (não há objetivo padrão)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (caminho de pesquisa)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (sem importância)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (sem expansão ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr ""
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr ""
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "síntaxe inválida na condicional"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr ""
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "comandos começam antes do primeiro alvo"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "falta uma regra antes dos comandos"
 
-#: read.c:1131
+#: read.c:1124
 #, fuzzy
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr " (você pensou em TAB ao invés de 8 espaços?)"
 
-#: read.c:1133
+#: read.c:1126
 #, fuzzy
 msgid "missing separator"
 msgstr "faltando o separador%s"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "faltando o padrão dos alvos"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "múltiplos padrões para o alvo"
 
-#: read.c:1276
+#: read.c:1268
 #, fuzzy, c-format
 msgid "target pattern contains no '%%'"
 msgstr "padrão para o alvo não contém `%%'"
 
-#: read.c:1398
+#: read.c:1390
 #, fuzzy
 msgid "missing 'endif'"
 msgstr "faltando `endif'"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "nome de variável vazio"
 
-#: read.c:1471
+#: read.c:1463
 #, fuzzy
 msgid "extraneous text after 'define' directive"
 msgstr "Texto estranho depois da diretiva `define'"
 
-#: read.c:1496
+#: read.c:1488
 #, fuzzy
 msgid "missing 'endef', unterminated 'define'"
 msgstr "faltando `endef', `define' não terminado"
 
-#: read.c:1524
+#: read.c:1516
 #, fuzzy
 msgid "extraneous text after 'endef' directive"
 msgstr "Texto estranho depois da diretiva `endef"
 
-#: read.c:1595
+#: read.c:1588
 #, fuzzy, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "Texto estranho depois da diretiva `%s'"
 
-#: read.c:1596
+#: read.c:1589
 #, fuzzy, c-format
 msgid "extraneous '%s'"
 msgstr "`%s' estranho"
 
-#: read.c:1624
+#: read.c:1617
 #, fuzzy
 msgid "only one 'else' per conditional"
 msgstr "use apenas um `else' por condicional"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Definição de variável para o alvo mau formada"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "os pré-requisitos não podem ser definidos no comando"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "As regras implícitas e de padrão estático misturadas"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "As regras implícitas e normais misturadas"
 
-#: read.c:2091
+#: read.c:2085
 #, fuzzy, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "O alvo `%s' não coincide com o padrão"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, fuzzy, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "O arquivo alvo `%s' tem entradas : e ::"
 
-#: read.c:2112
+#: read.c:2106
 #, fuzzy, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "O alvo `%s' foi informado mais do que um vez na mesma regra."
 
-#: read.c:2122
+#: read.c:2116
 #, fuzzy, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "aviso: sobreescrevendo os comandos para o alvo `%s'"
 
-#: read.c:2125
+#: read.c:2119
 #, fuzzy, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "aviso: ignorando comandos antigos para o alvo `%s'"
 
-#: read.c:2229
+#: read.c:2223
 #, fuzzy
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr "As regras implícitas e normais misturadas"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "aviso: caracter NUL detetado; o resto da linha foi ignorado"
 
-#: remake.c:230
+#: remake.c:225
 #, fuzzy, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Nada a ser feito para `%s'."
 
-#: remake.c:231
+#: remake.c:226
 #, fuzzy, c-format
 msgid "'%s' is up to date."
 msgstr "`%s' está atualizado."
 
-#: remake.c:303
+#: remake.c:322
 #, fuzzy, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Atualizando o arquivo `%s'.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%sSem regra para processar o alvo `%s', necessário por `%s'%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sSem regra para processar o alvo `%s'%s"
 
-#: remake.c:426
+#: remake.c:441
 #, fuzzy, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Considerando o arquivo alvo `%s'.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, fuzzy, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Tentativa de atualizar o arquivo `%s' falhou.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, fuzzy, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "O arquivo `%s' já foi considerado.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, fuzzy, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Ainda está atualizando o arquivo `%s'.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, fuzzy, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Atualização do arquivo `%s' concluida.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, fuzzy, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "O arquivo `%s' não existe.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, fuzzy, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1671,137 +1659,137 @@ msgstr ""
 "*** Aviso: arquivo .LOW_RESOLUTION_TIME `%s' tem uma etiqueta de tempo de "
 "alta resolução"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, fuzzy, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Regra implícita encontrada para `%s'.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, fuzzy, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Nenhuma regra implícita encontrada para `%s'.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, fuzzy, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Usando os comandos padrões para `%s'.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Dependência circular %s <- %s abandonada."
 
-#: remake.c:675
+#: remake.c:690
 #, fuzzy, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Pré-requisitos do alvo `%s' concluido.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, fuzzy, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Pré-requisitos do `%s' estão sendo criados.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, fuzzy, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Desistindo do arquivo `%s'.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, fuzzy, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "O alvo `%s' não foi reprocessado por causa de erros."
 
-#: remake.c:752
+#: remake.c:767
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Pré-requisito `%s' está ordenado para o alvo `%s'.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, fuzzy, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Pré-requisitos `%s' do alvo `%s' não existem.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Pré-requisito `%s' é mais novo do que o alvo `%s'.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Pré-requisito `%s' é mais antigo do que o alvo `%s'.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, fuzzy, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "O alvo `%s' é dois-pontos duplos e não tem pré-requisitos.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, fuzzy, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "Nenhum comando para `%s' e nenhum pré-requisito foi alterado.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, fuzzy, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Processando `%s' devido a opção always-make.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, fuzzy, c-format
 msgid "No need to remake target '%s'"
 msgstr "Não é necessário reprocessar o alvo `%s'"
 
-#: remake.c:805
+#: remake.c:820
 #, fuzzy, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; usando o nome VPATH `%s'"
 
-#: remake.c:825
+#: remake.c:840
 #, fuzzy, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "O alvo `%s' deve ser reprocessado.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, fuzzy, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  Ignorando o nome VPATH `%s'.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, fuzzy, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Os comandos de `%s' estão rodando.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, fuzzy, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Falha ao reprocessar o alvo `%s'.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, fuzzy, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Alvo `%s' reprocessado com sucesso.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, fuzzy, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "O alvo `%s' precisa ser reprocessado sob -q.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, fuzzy, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Usando os comandos padrões para `%s'.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "** Aviso: O arquivo `%s' está com a hora adiantada"
 
-#: remake.c:1411
+#: remake.c:1443
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "** Aviso: O arquivo `%s' está com a hora %s s adiantada"
 
-#: remake.c:1610
+#: remake.c:1646
 #, fuzzy, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "O elemento .LIBPATTERNS `%s' não é um padrão"
@@ -1811,7 +1799,7 @@ msgstr "O elemento .LIBPATTERNS `%s' n
 msgid "Customs won't export: %s\n"
 msgstr "Customizações não exportadas: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1819,7 +1807,7 @@ msgstr ""
 "\n"
 "# Regras implícitas."
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1827,7 +1815,7 @@ msgstr ""
 "\n"
 "# Faltam as regras implícitas."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1836,11 +1824,11 @@ msgstr ""
 "\n"
 "# %u regras implícitas, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminal."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "ERRO: num_pattern_rules errada!  %u != %u"
@@ -2001,14 +1989,14 @@ msgstr "Solicita
 msgid "Floating point co-processor not available"
 msgstr "Co-processador aritmético indisponível"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
 msgstr ""
 
-#: strcache.c:266
+#: strcache.c:304
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2016,24 +2004,24 @@ msgid ""
 "B\n"
 msgstr "%s strcache usado: total = %d (%d) / max = %d / min = %d / med = %d\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:280
+#: strcache.c:319
 #, fuzzy, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s strcache usado: total = %d (%d) / max = %d / min = %d / med = %d\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, fuzzy, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr "%s strcache livres: total = %d (%d) / max = %d / min = %d / med = %d\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2042,7 +2030,7 @@ msgstr ""
 "\n"
 "%s # de cadeias em strcache: %d / pesquisados = %lu / encontrados = %lu\n"
 
-#: strcache.c:289
+#: strcache.c:328
 #, fuzzy
 msgid ""
 "# hash-table stats:\n"
@@ -2052,45 +2040,45 @@ msgstr ""
 "# tabela hash de arquivos:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automático"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "padrão"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "ambiente"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "ambiente sob -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "linha de comando"
 
-#: variable.c:1617
+#: variable.c:1647
 #, fuzzy
 msgid "'override' directive"
 msgstr "diretiva `override'"
 
-#: variable.c:1628
+#: variable.c:1658
 #, fuzzy, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (de `%s', linha %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# tabela hash do conjunto de variávies:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2098,7 +2086,7 @@ msgstr ""
 "\n"
 "# Variáveis\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2106,7 +2094,7 @@ msgstr ""
 "\n"
 "# Valores da variável de padrões específicos"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2114,7 +2102,7 @@ msgstr ""
 "\n"
 "# Faltam valores para variável de padrões específicos"
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2133,87 +2121,37 @@ msgstr "aviso: vari
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() falhou com %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Aviso: Redireção vazia\n"
-
-#: vmsjobs.c:183
-#, fuzzy, c-format
-msgid "internal error: '%s' command_state"
-msgstr "erro interno: `%s' command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr "-warning, pode ser preciso reativar o CTRL-Y no DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "EMBUTIDO [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "CD EMBUTIDO %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "CD EMBUTIDO %s\n"
-
-#: vmsjobs.c:505
+#: vmsjobs.c:1228
 #, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Comando embutido desconhecido `%s'.\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Erro, comando vazio\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Entrada de %s redirecionada\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Erro redirecionado para %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Saida redirecionada para %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Saida redirecionada para %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Acrescentado %.*s e limpo\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Executando %s ao invés de\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Erro de execução, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2221,12 +2159,12 @@ msgstr ""
 "\n"
 "# Caminho VPATH\n"
 
-#: vpath.c:600
+#: vpath.c:620
 #, fuzzy
 msgid "# No 'vpath' search paths."
 msgstr "# Sem caminho `vpath'."
 
-#: vpath.c:602
+#: vpath.c:622
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2235,7 +2173,7 @@ msgstr ""
 "\n"
 "# %u caminhos `vpath'.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 #, fuzzy
 msgid ""
 "\n"
@@ -2244,7 +2182,7 @@ msgstr ""
 "\n"
 "# Sem caminho genérico (variável `VPATH')."
 
-#: vpath.c:611
+#: vpath.c:631
 #, fuzzy
 msgid ""
 "\n"
@@ -2255,12 +2193,46 @@ msgstr ""
 "# Caminho genérico (variável `VPATH'):\n"
 "# "
 
+#: w32/w32os.c:46
+#, fuzzy, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Cliente Jobserver (fds %d,%d)\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:84
+#, fuzzy, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Cliente Jobserver (fds %d,%d)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr ""
+
 #~ msgid "#  Invalid value in `update_status' member!"
 #~ msgstr "# Valor inválido no membro `update_status' !"
 
 #~ msgid "*** [%s] Error 0x%x (ignored)"
 #~ msgstr "*** [%s] Erro 0x%x (ignorado)"
 
+#~ msgid "*** [%s] Error 0x%x"
+#~ msgstr "*** [%s] Erro 0x%x"
+
 #~ msgid "Invoking recipe from %s:%lu to update target `%s'.\n"
 #~ msgstr "Chamando os comandos de %s:%lu para atualizar o alvo `%s'.\n"
 
@@ -2270,6 +2242,9 @@ msgstr ""
 #~ msgid "internal error: multiple --jobserver-fds options"
 #~ msgstr "erro interno: múltiplas opções --jobserver-fds"
 
+#~ msgid "dup jobserver"
+#~ msgstr "dup jobserver"
+
 #~ msgid "virtual memory exhausted"
 #~ msgstr "A memória virtual encheu"
 
@@ -2288,9 +2263,36 @@ msgstr ""
 #~ "# tabela hash de arquivos:\n"
 #~ "#"
 
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Aviso: Redireção vazia\n"
+
+#~ msgid "internal error: `%s' command_state"
+#~ msgstr "erro interno: `%s' command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "EMBUTIDO [%s][%s]\n"
+
 #~ msgid "BUILTIN RM %s\n"
 #~ msgstr "RM EMBUTIDO %s\n"
 
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Comando embutido desconhecido `%s'.\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Erro, comando vazio\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Entrada de %s redirecionada\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Erro redirecionado para %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Saida redirecionada para %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Erro de execução, %d\n"
+
 #~ msgid "process_easy() failed failed to launch process (e=%ld)\n"
 #~ msgstr "process_easy() falhou ao executar o processo (e=%ld)\n"
 
index 1954613..4931c93 100644 (file)
Binary files a/po/ru.gmo and b/po/ru.gmo differ
index 624c68e..9472683 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -6,20 +6,20 @@
 # Alexey Mahotkin <alexm@hsys.msk.ru>, 2001.
 # Denis Perchine <dyp@perchine.com>, 2001, 2002.
 # Pavel Maryanov <acid_jack@ukr.net>, 2009.
-# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2013.
+# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2013, 2014, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: make 4.0\n"
+"Project-Id-Version: make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-10-10 20:44+0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-25 19:04+0300\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
-"Language-Team: Russian <gnu@mx.ru>\n"
+"Language-Team: Russian <gnu@d07.ru>\n"
 "Language: ru\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.4\n"
+"X-Generator: Lokalize 1.5\n"
 "Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
@@ -54,83 +54,84 @@ msgstr ""
 "обновление времени изменения: Функция ar_member_touch вернула\n"
 "ошибочное значение для «%s»"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr "lbr$set_module() не смогла извлечь информацию о модуле, статус = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$init_control() вернула код ошибки %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "Ошибка открытия библиотеки «%s» для поиска элемента «%s»"
+msgstr ""
+"невозможно открыть библиотеку «%s» для определения состояния элемента %d"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Элемент «%s»%s: %ld байт по адресу %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (имя может быть усечено)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Дата %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, mode = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "В способе слишком много строк (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Останов.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Элемент архива «%s», кажется, недействителен; не удалён"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Элемент архива «%s», кажется, недействителен; не удалён"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Удаляется файл «%s»"
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Удаляется файл «%s»"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  способ, который следует применить"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (встроенные):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr "  (из «%s», строка %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -138,62 +139,62 @@ msgstr ""
 "\n"
 "# Каталоги\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: невозможно получить сведения вызовом stat.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (ключ %s, время модификации %d): невозможно открыть.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (устройство %d, inode [%d,%d,%d]): невозможно открыть.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (устройство %ld, inode %ld): невозможно открыть.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (ключ %s, время модификации %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (устройство %d, inode [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (устройство %ld, inode %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Нет"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " файлов,"
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "нет"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " недостижимых целей"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " на текущий момент."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " недостижимых целей в %lu каталогах.\n"
@@ -203,157 +204,157 @@ msgstr " недостижимых целей в %lu каталогах.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Рекурсивная переменная «%s» ссылается сама на себя (в результате)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "незавершённая ссылка на переменную"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Способ для файла «%s» был задан в %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr "Способ для файла «%s» был найден из неявного правила,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "но «%s» и «%s» теперь считаются одним и тем же файлом."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ""
 "Способ для «%s» игнорируется, вместо него будет использован способ для «%s»."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 "невозможно переименовать «%s» с одним двоеточием в «%s» с двумя двоеточиями"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr ""
 "невозможно переименовать «%s» с двумя двоеточиями в «%s» с одним двоеточием"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Удаление промежуточного файла «%s»"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Удаление промежуточных файлов...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Текущее время"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Временной штамп выходит за пределы диапазона; подставляем %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Не является целью:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Ценный файл (зависимость .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Псевдоцель (зависимость от .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Цель, вызываемая из командной строки."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  По умолчанию, MAKEFILES, или -include/sinclude makefile."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "# Встроенное правило"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Производился поиск неявных правил."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Поиск неявных правил не производился."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Основа неявного или статического образца: «%s»\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Файл — промежуточная зависимость."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Собирает также:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Время изменения ни разу не проверялось."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Файл не существует."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Файл очень старый."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Время последнего изменения %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Файл был обновлён."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Файл не был обновлён."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  В данный момент уже применяется некий способ (ЭТО ОШИБКА)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr ""
 "#  В данный момент уже применяется некий способ по зависимостям (ЭТО ОШИБКА)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Успешно обновлено."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Должно быть обновлено (задан ключ -q)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Попытка обновления безуспешна."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Неверное значение члена «command_state»!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -361,7 +362,7 @@ msgstr ""
 "\n"
 "# Файлы"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -371,105 +372,122 @@ msgstr ""
 "# состояние файлов хеш-таблицы:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: Поле «%s» не кешировано: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "нечисловой первый аргумент функции «word»"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "первый аргумент функции «word» должен быть больше нуля"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "нечисловой первый аргумент функции «wordlist»"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "нечисловой второй аргумент функции «wordlist»"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(In) вернула код ошибки (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(Err) вернула код ошибки (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() вернула код ошибки (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() завершилась неудачно\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Очищаю временный пакетный файл %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "файл: отсутствует имя файла"
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "открытие: %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "запись: %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr "Ð\9dекоÑ\80Ñ\80екÑ\82наÑ\8f Ð¾Ð¿ÐµÑ\80аÑ\86иÑ\8f Ñ\81 Ñ\84айлом: %s"
+msgid "close: %s: %s"
+msgstr "закÑ\80Ñ\8bÑ\82ие: %s: %s"
 
-#: function.c:2324
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "файл: слишком много аргументов"
+
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr "чтение: %s: %s"
+
+#: function.c:2275
+#, c-format
+msgid "file: invalid file operation: %s"
+msgstr "файл: некорректная операция с файлом: %s"
+
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "недостаточно аргументов (всего %d) функции «%s»"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "не реализовано на этой платформе: функция «%s»"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "незавершённый вызов функции «%s»: пропущено «%c»"
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "Пустое имя функции\n"
+msgstr "Пустое имя функции"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "Некорректное имя функции: %s\n"
+msgstr "Некорректное имя функции: %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "Слишком длинное имя функции: %s\n"
+msgstr "Слишком длинное имя функции: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "Некорректное минимальное число аргументов (всего %d) функции %s\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "Некорректное минимальное число аргументов (всего %d) функции %s"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "Некорректное максимальное число аргументов (всего %d) функции %s\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "Некорректное максимальное число аргументов (всего %d) функции %s"
 
 # Сообщения getopt исключены, т.к. они относятся к уже
 # устаревшей версии этой библиотеки, и исчезнут в следующей версии make
@@ -568,7 +586,7 @@ msgstr "Поиск неявного правила для «%s».\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Поиск неявного правила для элемента архива «%s».\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Избежание рекурсивного вызова неявного правила.\n"
 
@@ -612,100 +630,76 @@ msgstr "Обнаружена зависимость «%s» в виде VPATH «%
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Поиск правила с промежуточным файлом «%s».\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Не удалось создать временный файл\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (сделан дамп памяти)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (игнорирование)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<встроенное>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: ошибка выполнения рецепта для цели «%s»"
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "%s[%s] Ошибка %d%s"
-
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Ошибка 0x%x%s"
-
-#: job.c:529
+#: job.c:510
 #, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] Ошибка %d%s"
 
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Ожидание завершения заданий…"
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Незавершённый потомок %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (удалённый)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Подбирается неудачно завершившийся  потомок %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Подбирается удачно завершившийся потомок %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Подчищаю временный пакетный файл %s\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Очистка временного пакетного файла %s завершилась с ошибкой (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Удаляется потомок %p PID %s%s из цепочки.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "освобождение семафора сервера заданий: (ошибка %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Освобождён токен для потомка %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "запись сервера заданий"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() не смогла запустить процесс (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -714,97 +708,93 @@ msgstr ""
 "\n"
 "При неудачном запуске сосчитано %d аргументов\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Помещение потомка %p (%s) PID %s%s в цепочку потомков.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "ожидание семафора или процесса-потомка: (ошибка %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Получен токен для потомка %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "чтение потока заданий"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: цель «%s» не существует"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: обновление цели «%s» из-за: %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "эта операционная система не позволяет устанавливать пределы загрузки"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "невозможно установить пределы загрузки: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "закончились файловые дескрипторы: не удалось сделать копию stdin\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "закончились файловые дескрипторы: не удалось сделать копию stdout\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "закончились файловые дескрипторы: не удалось сделать копию stderr\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Не удалось восстановить stdin\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Не удалось восстановить stdout\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "Не удалось восстановить stderr\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "make нашла завершившегося потомка pid %s, всё ещё ожидает pid %s\n"
 
-#: job.c:2458
+#: job.c:2275
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: Команда не найдена"
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: Команда не найдена\n"
 
-#: job.c:2518
+#: job.c:2277
+#, c-format
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: Команда не найдена\n"
+
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Командный процессор не найден"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: вероятно, закончилось место под окружение"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "Переменная $SHELL изменилась (было «%s», теперь «%s»)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Создаётся временный пакетный файл %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -812,7 +802,7 @@ msgstr ""
 "Содержимое файла пакетных заданий:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -821,7 +811,7 @@ msgstr ""
 "Содержимое файла пакетных заданий:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
@@ -852,28 +842,28 @@ msgstr "Не удалось загрузить символ %s из %s: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "Пустое имя символа для загрузки: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Загружается символ %s из %s\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Операция «load» не поддерживается на этой платформе."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Ключи:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Игнорируется для совместимости.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make           Без условий отрабатывать все цели.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -881,18 +871,18 @@ msgstr ""
 "  -C КАТАЛОГ, --directory=КАТАЛОГ\n"
 "                              Перейти в КАТАЛОГ перед выполнением действий.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          Выводить массу отладочных сообщений.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=ФЛАГИ]             Выводить различные типы отладочной "
 "информации.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -901,13 +891,13 @@ msgstr ""
 "                              Переменные окружения заменяют значения "
 "makefile.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "  --eval=СТРОКА               Вычислить СТРОКУ как предложение makefile.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -915,15 +905,15 @@ msgstr ""
 "  -f ФАЙЛ, --file=ФАЙЛ, --makefile=ФАЙЛ\n"
 "                              Использовать ФАЙЛ в качестве makefile.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Показать эту справку и выйти.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr "  -i, --ignore-errors         Игнорировать ошибки способов.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -931,7 +921,7 @@ msgstr ""
 "  -I КАТАЛОГ, --include-dir=КАТАЛОГ\n"
 "                              Искать включаемые make-файлы в КАТАЛОГЕ.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -940,14 +930,14 @@ msgstr ""
 "                              если N не указано, число заданий "
 "неограничено.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Продолжать работу, даже если некоторые цели\n"
 "                              не могут быть достигнуты.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -956,7 +946,7 @@ msgstr ""
 "  -l [N], --load-average[=N], --max-load[=N]         Не запускать\n"
 "                               несколько заданий, если загрузка больше N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -964,7 +954,7 @@ msgstr ""
 "  -L, --check-symlink-times   Использовать последнее mtime при выборе между\n"
 "                              символическими ссылками и целью.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -974,7 +964,7 @@ msgstr ""
 "                              Не применять способ на самом деле; просто\n"
 "                              напечатать его.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -984,7 +974,7 @@ msgstr ""
 "                              Считать ФАЙЛ очень старым и не переделывать "
 "его.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -993,12 +983,12 @@ msgstr ""
 "                              Синхронизировать вывод параллельных\n"
 "                              заданий с типом ТИП.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr ""
 "  -p, --print-data-base       Напечатать внутреннюю базу данных make.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1007,23 +997,23 @@ msgstr ""
 "                              код завершения показывает, всё ли уже "
 "сделано.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Не использовать встроенные неявные правила.\n"
 
 # Что такое "variable settings"?
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables   Выключить установку встроенных\n"
 "                              значений переменных.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet        Не показывать сами способы.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1031,26 +1021,26 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Отменить ключ -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Установить время доступа целей в текущее,\n"
 "                              а не пересобирать их.\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                     Выводить трассировочную информацию.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr "  -v, --version               Показать информацию о версии и выйти.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Напечатать текущий каталог.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1058,7 +1048,7 @@ msgstr ""
 "  --no-print-directory        Отменить ключ -w, даже если он был явно "
 "указан.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1066,7 +1056,7 @@ msgstr ""
 "  -W ФАЙЛ, --what-if=ФАЙЛ, --new-file=ФАЙЛ, --assume-new=ФАЙЛ\n"
 "                              Считать ФАЙЛ всегда новым.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1074,26 +1064,26 @@ msgstr ""
 "  --warn-undefined-variables  Выдавать предупреждение при ссылке\n"
 "                              на неопределённую переменную.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "пустая строка недопустима в качестве имени файла"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "задан неизвестный уровень отладки «%s»"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "неизвестный тип output-sync «%s»"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: поймано прерывание или исключение (код = 0x%lx, адрес = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1108,181 +1098,136 @@ msgstr ""
 "Флаги исключения = %lx\n"
 "Адрес исключения = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Нарушение доступа: операция записи по адресу 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Нарушение доступа: операция чтения адреса 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() устанавливает default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "find_and_set_shell(): поиск в путях устанавливает default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s приостанавливается на 30 секунд..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "sleep(30) завершён. Продолжаем.\n"
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
-"внутренняя ошибка: не удалось открыть семафор сервера заданий «%s»: (ошибка "
-"%ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Клиент сервера заданий (семафор %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "внутренняя ошибка: неправильная строка --jobserver-fds «%s»"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Клиент сервера заданий (fds %d,%d)\n"
+"предупреждение: сервер заданий недоступен: используется -j1. Добавьте «+» к "
+"правилу в родительском make."
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
 "предупреждение: в суб-Makefile принудительно задан -jN; режим сервера "
 "заданий запрещён"
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "создаю копию сервера заданий"
-
-#: main.c:1570
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-"предупреждение: сервер заданий недоступен: используется -j1. Добавьте «+» к "
-"правилу в родительском make."
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefile из стандартного ввода указан дважды."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (временный файл)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (временный файл)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Параллельные задания (-j) не поддерживаются на этой платформе."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Возвращается режим одиночного задания (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Количество слотов сервера заданий ограничено %d\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "создание семафора сервера заданий: (ошибка %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "создаётся канал заданий"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "начальная настройка сервера заданий"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Символические ссылки не поддерживаются: отменяется ключ -L."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Обновление make-файлов....\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "Make-файл «%s», возможно, зациклен, он не будет пересобираться.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Попытка пересобрать make-файл «%s» завершилась неудачно."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Включаемый make-файл «%s» не найден."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Make-файл «%s» не найден"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Невозможно перейти в первоначальный каталог."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Повторное выполнение[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (временный файл)"
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL содержит более одной цели"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Не заданы цели и не найден make-файл"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Нет целей"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Обновление целей результата...\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr "предупреждение: Неправильный ход часов.  Сборка может быть неполной."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Использование: %s [КЛЮЧ]... [ЦЕЛЬ]...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1291,7 +1236,7 @@ msgstr ""
 "\n"
 "Эта программа собрана для %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1300,32 +1245,32 @@ msgstr ""
 "\n"
 "Эта программа собрана для %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Сообщайте об ошибках по адресу <bug-make@gnu.org>\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "для ключа «%s%s» нужно указать аргументом непустую строку"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "ключ «-%c» должен использоваться с целым положительным аргументом"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sЭта программа собрана для %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sЭта программа собрана для %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1338,7 +1283,7 @@ msgstr ""
 "%sЭто свободное программное обеспечение: вы можете свободно изменять его и\n"
 "%sраспространять. НЕТ НИКАКИХ ГАРАНТИЙ вне пределов, допустимых законом.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1347,7 +1292,7 @@ msgstr ""
 "\n"
 "# База данных Make, напечатана %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1356,31 +1301,31 @@ msgstr ""
 "\n"
 "# Печать базы данных Make завершена %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Неизвестная ошибка %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr ""
 "%s: пользователь %lu (действительный %lu),\n"
 "группа %lu (действительная %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Доступ инициализации"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Доступ пользователя"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Доступ make"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Доступ потомка"
 
@@ -1425,9 +1370,8 @@ msgid "%s[%u]: Leaving directory '%s'\n"
 msgstr "%s[%u]: выход из каталога «%s»\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "ошибка записи: %s"
+msgstr "ошибка записи: stdout"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1443,225 +1387,260 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "создаётся канал заданий"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "делается копия канала заданий"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "инициализация канала сервера заданий"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "внутренняя ошибка: неправильная строка --jobserver-auth «%s»"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Клиент сервера заданий (fds %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "конвейер сервера заданий"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "запись сервера заданий"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "pselect из канала заданий"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "чтение канала заданий"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Чтение make-файлов...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "Чтение make-файла «%s»"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (нет цели по умолчанию)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (путь поиска)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (игнорировать ошибки)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (не раскрывать символ `~') "
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "Пропуск UTF-8 BOM в make-файле «%s»\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "Пропуск UTF-8 BOM в буфере make-файла\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "неверный синтаксис в условном выражении"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: не удалось загрузить"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "обнаружен способ до первого определения цели"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "перед способом отсутствует правило"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr "(не имели ли вы в виду TAB вместо восьми пробелов?)"
+msgstr "пропущен разделитель (возможно нужен TAB вместо восьми пробелов?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "пропущен разделитель%s"
+msgstr "пропущен разделитель"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "пропущен образец цели"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "несколько образцов цели"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "образец цели не содержит «%%»"
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "отсутствует «endif»"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "пустое имя переменной"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "излишний текст после директивы «define»"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "отсутствует «endif», незавершённая «define»"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "излишний текст после директивы «endef»"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "Излишний текст после директивы «%s»"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "излишняя «%s»"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "в условном выражении возможна только одна «else»"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Неправильный формат задания переменной цели"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "в способах не могут задаваться зависимости"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "смешаны неявные правила и правила со статическими образцами"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "смешаны неявные и обычные правила"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "цель «%s» не соответствует образцу целей"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "целевой файл «%s» имеет вхождения и с :, и с ::"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "цель «%s» указана несколько раз в одном правиле"
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "предупреждение: переопределение способа для цели «%s»"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "предупреждение: старый способ для цели «%s» игнорируются"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "смешаны неявные и обычные правила"
+msgstr "*** смешаны неявные и обычные правила: устаревший синтаксис"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "предупреждение: встречен символ NUL; игнорируется до конца строки"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Цель «%s» не требует выполнения команд."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "«%s» не требует обновления."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Обрезается файл «%s».\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%sНет правила для сборки цели «%s», требуемой для «%s»%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sНет правила для сборки цели «%s»%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Обработка целевого файла «%s».\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Предыдущая попытка обновить файл «%s» завершилась неудачно.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Файл «%s» уже был обработан.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Файл «%s» обновляется в данный момент.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Обновление файла «%s» завершено.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Файл «%s» не существует.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1669,137 +1648,137 @@ msgstr ""
 "*** Предупреждение: у файла «%s» параметр LOW_RESOLUTION_TIME содержит метку "
 "времени с высокой точностью"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Найдено неявное правило для «%s».\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Не найдено неявного правила для «%s».\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Использование способа по умолчанию для «%s».\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Циклическая зависимость %s <- %s пропущена."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Обновление целей, от которых зависит целевой файл «%s», завершено.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Цели, от которых зависит «%s», в настоящий момент собираются.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Аварийный останов на целевом файле «%s».\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Цель «%s» не была пересобрана из-за ошибок."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Зависимость «%s» для цели «%s» зависит от порядка.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Зависимость «%s» цели «%s» не существует.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Зависимость «%s» новее, чем цель «%s».\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Зависимость «%s» старее, чем цель «%s».\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "Цель «%s» объявлена с двумя двоеточиями и не имеет зависимостей.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "Способ для «%s» не задан, и начальные условия не изменены.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Пересборка «%s» из-за установленного флага always-make.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "Нет необходимости пересобирать цель «%s»"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; используется VPATH-имя «%s»"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Необходимо пересобрать цель «%s».\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  Игнорируется VPATH-имя «%s».\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "В настоящее время применяется способ «%s».\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Не удалось пересоздать файл цели «%s».\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Целевой файл «%s» успешно пересоздан.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Целевой файл «%s» требует пересоздания с ключом -q.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Использование команд по умолчанию для «%s».\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Предупреждение: время изменения файла «%s» находится в будущем"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Предупреждение: время изменения файла «%s» находится в будущем (%s)"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "Элемент .LIBPATTERNS «%s» не является образцом"
@@ -1809,7 +1788,7 @@ msgstr "Элемент .LIBPATTERNS «%s» не является образцо
 msgid "Customs won't export: %s\n"
 msgstr "Не экспортируемые настройки: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1817,7 +1796,7 @@ msgstr ""
 "\n"
 "# Неявные правила"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1825,7 +1804,7 @@ msgstr ""
 "\n"
 "# Неявных правил нет."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1834,11 +1813,11 @@ msgstr ""
 "\n"
 "# Неявных правил: %u, терминальных: %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " терминал."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "ОШИБКА: неверное значение num_pattern_rules! %u != %u"
@@ -1999,7 +1978,7 @@ msgstr "Запрос информации"
 msgid "Floating point co-processor not available"
 msgstr "Сопроцессор с плавающей точкой недоступен"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -2008,7 +1987,7 @@ msgstr ""
 "\n"
 "%s без буферов strcache\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2019,7 +1998,7 @@ msgstr ""
 "%s буферы strcache: %lu (%lu) / строк = %lu / хранилище = %lu Б / сред = %lu "
 "Б\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
@@ -2027,13 +2006,13 @@ msgstr ""
 "%s текущий buf: размер = %hu Б / используется = %hu Б / кол-во = %hu / сред "
 "= %hu Б\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr ""
 "%s для другого используется: всего = %lu Б / кол-во = %lu / сред = %lu Б\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
@@ -2041,7 +2020,7 @@ msgstr ""
 "%s для другого свободно: всего = %lu Б / макс. = %lu Б / мин. = %lu Б / "
 "сред. = %hu Б\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2050,7 +2029,7 @@ msgstr ""
 "\n"
 "%s производительность strcache: поисков = %lu / найдено = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2058,44 +2037,44 @@ msgstr ""
 "# состояние хеш-таблицы:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "автоматическая"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "по умолчанию"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "определена в среде"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "make-файл"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "окружение с -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "определена в командной строке"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "Директива «override»"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (из «%s», строка %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# состояние переменных в хеш-таблице:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2103,7 +2082,7 @@ msgstr ""
 "\n"
 "# Переменные\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2111,7 +2090,7 @@ msgstr ""
 "\n"
 "# Значения переменных особенные для маски"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2119,7 +2098,7 @@ msgstr ""
 "\n"
 "# Нет значений переменных особенных для маски."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2138,89 +2117,39 @@ msgstr "предупреждение: неопределённая переме
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() вернула код ошибки %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Предупреждение: Пустое перенаправление\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "внутренняя ошибка: «%s» command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 "-предупреждение, возможно вам потребуется повторно разрешить\n"
 "обработку CTRL-Y из DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "ВСТРОЕННЫЙ [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "ВСТРОЕННЫЙ CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "ВСТРОЕННЫЙ CD %s\n"
-
-#: vmsjobs.c:505
+#: vmsjobs.c:1228
 #, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Неизвестная встроенная команда '%s'\n"
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Ошибка, пустая команда\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Стандартный ввод перенаправлен из %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Поток ошибок перенаправлен в %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Стандартный вывод добавлен в %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Стандартный вывод перенаправлен в %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Добавить %.*s и очистить\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Вместо заданного выполняется %s\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Ошибка порождения процесса, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2228,11 +2157,11 @@ msgstr ""
 "\n"
 "# Пути поиска VPATH\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# Не определён путь поиска «vpath»."
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2241,7 +2170,7 @@ msgstr ""
 "\n"
 "# %u путей поиска по «vpath»\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2249,7 +2178,7 @@ msgstr ""
 "\n"
 "# Не определён общий (переменная «VPATH») путь поиска."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2259,6 +2188,85 @@ msgstr ""
 "# Общий (переменная «VPATH») путь поиска:\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Количество слотов сервера заданий ограничено %d\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "создание семафора сервера заданий: (ошибка %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"внутренняя ошибка: не удалось открыть семафор сервера заданий «%s»: (ошибка "
+"%ld: %s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Клиент сервера заданий (семафор %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "освобождение семафора сервера заданий: (ошибка %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "ожидание семафора или процесса-потомка: (ошибка %ld: %s)"
+
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s: ошибка выполнения рецепта для цели «%s»"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] Ошибка 0x%x%s"
+
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
+#~ msgid "dup jobserver"
+#~ msgstr "создаю копию сервера заданий"
+
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Предупреждение: Пустое перенаправление\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "внутренняя ошибка: «%s» command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "ВСТРОЕННЫЙ [%s][%s]\n"
+
+#~ msgid "BUILTIN ECHO %s->%s\n"
+#~ msgstr "ВСТРОЕННАЯ ECHO %s->%s\n"
+
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Неизвестная встроенная команда «%s»\n"
+
+#~ msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+#~ msgstr ""
+#~ "Встроенная команда неизвестна или не поддерживается в .ONESHELL: «%s»\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Ошибка, пустая команда\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Стандартный ввод перенаправлен из %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Поток ошибок перенаправлен в %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Стандартный вывод перенаправлен в %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Ошибка порождения процесса, %d\n"
+
 #~ msgid "internal error: multiple --sync-mutex options"
 #~ msgstr "внутренняя ошибка: несколько ключей --sync-mutex"
 
index 4f9b305..0ab96aa 100644 (file)
Binary files a/po/sv.gmo and b/po/sv.gmo differ
index 4545ab3..bcdc422 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,17 +1,18 @@
 # Swedish messages translation of make
-# Copyright © 2002, 2007, 2011, 2013 Free Software Foundation, Inc.
+# Copyright © 2002, 2007, 2011, 2013, 2014, 2016 Free Software Foundation, Inc.
 # This file is distributed under the same license as the make package.
+#
 # Tomas Gradin <tg@df.lth.se>, 1996-2002.
 # Christer Andersson <klamm@comhem.se>, 2007.
-# Göran Uddeborg <goeran@uddeborg.se>, 2011, 2013.
+# Göran Uddeborg <goeran@uddeborg.se>, 2011, 2013, 2014, 2016.
 #
-# $Id: make.po,v 1.14 2013-10-09 21:33:42+02 göran Exp $
+# $Id: make.po,v 1.19 2016-04-24 20:34:25+02 göran Exp $
 msgid ""
 msgstr ""
-"Project-Id-Version: make 4.0\n"
+"Project-Id-Version: make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-10-09 21:33+0200\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-24 20:34+0200\n"
 "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
@@ -48,84 +49,84 @@ msgstr "nudda: medlemmen ”%s” finns inte i ”%s”"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "nudda: Felaktig returkod från ar_member_touch på ”%s”"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 "lbr$set_module() misslyckades med att extrahera modulinformation, status = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control() misslyckades och gav status = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "kan inte öppna biblioteket ”%s” för att slå upp medlemmen ”%s”"
+msgstr "kan inte öppna biblioteket ”%s” för att slå upp medlemsstatus %d"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Medlem ”%s”%s: %ld byte vid %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (namnet kan vara avkortat)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Datum %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, flaggor = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "Receptet har för många rader (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Avbrott.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Arkivmedlemmen ”%s” kan vara felaktig; ej borttagen"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Arkivmedlemmen ”%s” kan vara felaktig; ej borttagen"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Tar bort filen ”%s”"
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Tar bort filen ”%s”"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  recept att utföra"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (inbyggd):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (från ”%s”, rad %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -133,62 +134,62 @@ msgstr ""
 "\n"
 "# Kataloger\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: kunde inte ta status.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (nyckel %s, mtid %d): kunde inte öppnas.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (enhet %d, inod [%d,%d,%d]): kunde inte öppnas.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (enhet %ld, inod %ld): kunde inte öppnas.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (nyckel %s, mtid %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (enhet %d, inod [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (enhet %ld, inod %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Inga"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " filer, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "inga"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " omöjligheter"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " hittills."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " omöjligheter i %lu kataloger.\n"
@@ -198,156 +199,156 @@ msgstr " omöjligheter i %lu kataloger.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Den rekursiva variabeln ”%s” hänvisar till sig själv (så småningom)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "oavslutad variabelreferens"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Recept angavs för filen ”%s” på %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr "Recept för filen ”%s” hittades genom sökning efter implicit regel,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "men ”%s” anses nu vara samma fil som ”%s”."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ""
 "Kommer att bortse från recept för ”%s” till förmån för det som gäller ”%s”."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "kan inte ändra namn från enkelkolon ”%s” till dubbelkolon ”%s”"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "kan inte ändra namn från dubbelkolon ”%s” till enkelkolon ”%s”"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Tar bort mellanfilen ”%s”"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Tar bort mellanfiler …\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Nuvarande tid"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Tidsvärde utanför gränser; ersätter med %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Inte ett mål:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Värdefull fil (nödvändig för .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Låtsasmål (nödvändig för .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Kommandoradsmål."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr ""
 "#  En standardmakefil, eller enligt MAKEFILES, eller en -include/sinclude-"
 "makefil."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "#  Inbyggd regel"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Implicit regelsökning har genomförts."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Implicit regelsökning har inte genomförts."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Implicit/statisk mönsterstam: ”%s”\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Filen är ett övergående beroende."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Skapar också:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Ändringstiden har inte kontrollerats."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Filen finns inte."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Filen är mycket gammal."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Senast ändrad %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Filen har uppdaterats."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Filen har inte uppdaterats."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Recept körs just nu (DETTA ÄR ETT FEL)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Beroenderecept körs (DETTA ÄR ETT FEL)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Uppdateringen lyckades."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Behöver uppdateras (-q har angivits)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Uppdateringen misslyckades."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Ogiltigt värde i medlemmen ”command_state”!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -355,7 +356,7 @@ msgstr ""
 "\n"
 "# Filer"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -365,105 +366,122 @@ msgstr ""
 "# statistik för filhashtabell:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: Fältet ”%s” cachas inte: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "icke-numeriskt första argument till funktionen ”word”"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "det första argumentet till funktionen ”word” måste vara större än 0"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "icke-numeriskt första argument till funktionen ”wordlist”"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "icke-numeriskt andra argument till funktionen ”wordlist”"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(In) misslyckades (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(Fel) misslyckades (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() misslyckades (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() misslyckades\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Städar bort tillfällig satsfil %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "file: filnamn saknas"
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "öppna: %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "skriv: %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr "Felaktig filåtgärd: %s"
+msgid "close: %s: %s"
+msgstr "stäng: %s: %s"
 
-#: function.c:2324
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "file: för många argument"
+
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr "läs: %s: %s"
+
+#: function.c:2275
+#, c-format
+msgid "file: invalid file operation: %s"
+msgstr "file: felaktig filåtgärd: %s"
+
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "otillräckligt antal argument (%d) till funktionen ”%s”"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "ej implementerat på denna plattform: funktionen ”%s”"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "oavslutat funktionsanrop ”%s”: ”%c” saknas"
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "Tomt funktionsnamn\n"
+msgstr "Tomt funktionsnamn"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "Felaktigt funktionsnamn: %s\n"
+msgstr "Felaktigt funktionsnamn: %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "Funktionsnamnet är för långt: %s\n"
+msgstr "Funktionsnamnet är för långt: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "Felaktigt minsta antal argument (%d) till funktionen ”%s”\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "Felaktigt minsta antal argument (%d) till funktionen ”%s”"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "Felaktigt största antal argument (%d) till funktionen ”%s”\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "Felaktigt största antal argument (%d) till funktionen ”%s”"
 
 #: getopt.c:659
 #, c-format
@@ -560,7 +578,7 @@ msgstr "Letar efter en implicit regel för ”%s”.\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Letar efter en implicit regel för arkivmedlemmen ”%s”.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Undviker rekursion orsakad av implicit regel.\n"
 
@@ -604,100 +622,76 @@ msgstr "Hittade förutsättningen ”%s” som VPATH ”%s”\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Letar efter en regel med mellanfilen ”%s”.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Kan inte skapa en temporärfil\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (minnesdump)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (ignoreras)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<inbyggd>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: receptet för målet ”%s” misslyckades"
-
-#: job.c:516 job.c:524
+#: job.c:510
 #, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "%s[%s] Fel %d%s"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] Fel %d%s"
 
-#: job.c:519
-#, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Fel 0x%x%s"
-
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s]: %s%s%s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Inväntar oavslutade jobb..."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Levande barnprocess %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (fjärr)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Inhöstar misslyckad barnprocess: %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Inhöstar lyckad barnprocess: %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Städar bort tillfällig satsfil %s\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Bortstädning av tillfällig satsfil %s misslyckades (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Tar bort barnprocessen %p PID %s%s från kedjan.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "släpp jobbserversemafor: (Fel %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Frigjorde symbol för barnprocessen %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "skriver till jobbserver"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() misslyckades med processtart (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -706,97 +700,93 @@ msgstr ""
 "\n"
 "Räknade till %d argument vid misslyckad start\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "För upp barnprocessen %p (%s) PID %s%s på kedjan.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "väntan på semafor eller barnprocess: (Fel %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Erhöll symbol för barnprocessen %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "läser från jobbledning"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: målet ”%s” finns inte"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: uppdatera målet ”%s” på grund av: %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "kan inte upprätthålla lastbegränsningar i detta operativsystem"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "kan inte upprätthålla lastbegränsning: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "inga fler filhandtag: kunde inte duplicera standard in\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "inga fler filhandtag: kunde inte duplicera standard ut\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "inga fler filhandtag: kunde inte duplicera standard fel\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Kunde inte återställa standard in\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Kunde inte återställa standard ut\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "Kunde inte återställa standard fel\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "make inhöstade barn-pid %s, inväntar fortfarande pid %s\n"
 
-#: job.c:2458
+#: job.c:2275
+#, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: Kommandot hittades inte\n"
+
+#: job.c:2277
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: Kommandot hittades inte"
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: Kommandot hittades inte\n"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Skalprogrammet hittades inte"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: miljöutrymmet kanske är slut"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL ändrades (var ”%s”, är nu ”%s”)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Skapar tillfällig satsfil %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -804,7 +794,7 @@ msgstr ""
 "Satsfilinnehåll:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -813,7 +803,7 @@ msgstr ""
 "Satsfilinnehåll:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (rad %d) Felaktigt skalsammanhang (!unixy && !batch_mode_shell)\n"
@@ -842,28 +832,28 @@ msgstr "Misslyckades att ladda symbolen %s från %s: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "Tomt symbolnamn för laddning: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Laddar symbol %s från %s\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Operationen ”load” stödjs inte på denna plattform."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Flaggor:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Ignoreras av kompatibilitetsskäl.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make           Bygg ovillkorligen alla mål.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -871,19 +861,19 @@ msgstr ""
 "  -C KATALOG, --directory=KATALOG\n"
 "                              Byt katalog till KATALOG innan något görs.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr ""
 "  -d                          Skriv ut massor av felsökningsinformation.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=FLAGGOR]           Skriv ut olika sorters "
 "felsökningsinformation.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -891,12 +881,12 @@ msgstr ""
 "  -e, --environment-overrides\n"
 "                              Miljövariabler åsidosätter makefiler.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr "  --eval=STRÄNG               Evaluera STRÄNG som en makefile-sats.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -904,15 +894,15 @@ msgstr ""
 "  -f FIL, --file=FIL, --makefile=FIL\n"
 "                              Använd FIL som makefil.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Skriv ut detta meddelande och avsluta.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr "  -i, --ignore-errors         Ignorera fel från recept.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -920,7 +910,7 @@ msgstr ""
 "  -I KATALOG, --include-dir=KATALOG\n"
 "                              Genomsök KATALOG efter inkluderade makefiler.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -928,13 +918,13 @@ msgstr ""
 "  -j [N], --jobs[=N]          Tillåt N samtidiga jobb; oändligt många om "
 "inget antal anges.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Fortsätt även om vissa mål inte kan skapas.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -944,7 +934,7 @@ msgstr ""
 "                              Påbörja fler jobb endast om lasten understiger "
 "N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -952,7 +942,7 @@ msgstr ""
 "  -L, --check-symlink-times   Använd den senaste av mtiderna för symboliska "
 "länkar eller mål.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -961,7 +951,7 @@ msgstr ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Kör inte något recept, skriv bara ut dem.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -971,7 +961,7 @@ msgstr ""
 "                              Betrakta FIL som mycket gammal och återskapa "
 "den inte.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -980,11 +970,11 @@ msgstr ""
 "                              Synkronisera utmatningen av parallella jobb\n"
 "                              enligt TYP.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       Skriv ut makes interna databas.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -992,22 +982,22 @@ msgstr ""
 "  -q, --question              Kör inga recept; slutstatus visar om det är "
 "aktuellt.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Inaktivera de inbyggda implicita reglerna.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables  Inaktivera de inbyggda "
 "variabelinställningarna.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Återge inte recept.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1015,26 +1005,26 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Stäng av -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Nydatera mål i stället för att återskapa dem.\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                     Skriv spårningsinformation.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr ""
 "  -v, --version               Skriv ut makes versionsnummer och avsluta.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Skriv ut aktuell katalog.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1042,7 +1032,7 @@ msgstr ""
 "  --no-print-directory        Stäng av -w, även om det är implicit "
 "påslaget.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1050,7 +1040,7 @@ msgstr ""
 "  -W FIL, --what-if=FIL, --new-file=FIL, --assume-new=FIL\n"
 "                              Betrakta FIL som hur ny som helst.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1058,26 +1048,26 @@ msgstr ""
 "  --warn-undefined-variables  Varna vid användning av en odefinierad "
 "variabel.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "en tom sträng är ett ogiltigt filnamn"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "okänd felsökningsnivå ”%s” angiven"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "okänd typ av utmatningssynkronisering ”%s”"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: Avbrott/Undantag fångat (kod = 0x%lx, adress = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1092,178 +1082,135 @@ msgstr ""
 "Undantagsflaggor = %lx\n"
 "Undantagsadress = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Åtkomstförseelse: skrivinstruktion på adressen 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Åtkomstförseelse: läsinstruktion på adressen 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() ger default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "sökvägen för find_and_set_shell() gav default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s suspenderas i 30 sekunder..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "färdig med sleep(30). Fortsätter.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr "Internt fel: kan inte öppna jobbserversemaforen ”%s”: (Fel %ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Jobbserverklient (semafor %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "internt fel: ogiltig sträng ”--jobserver-fds” ”%s”"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Jobbserverklient (fb %d,%d)\n"
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr "varning: -jN framtvingat i del-make: inaktiverar jobbserverläge."
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "duplicerar jobbserver"
-
-#: main.c:1570
+#: main.c:1627
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
 "varning: jobbserver otillgänglig: använder -j1. Lägg till ”+” i "
 "föräldraregeln."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr "varning: -jN framtvingat i del-make: inaktiverar jobbserverläge."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefil från standard in angavs dubbelt."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (temporärfil)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (temporärfil)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Parallella jobb (-j) stöds inte på denna plattform."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Återställer till enkeljobbsläge (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Jobbserfacj begränsat till %d\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "skapar jobbserversemafor: (Fel %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "skapar jobbledning"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "iordningställer ledning till jobbserver"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Symboliska länkar stöds inte: inaktiverar -L."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Uppdaterar makefiler...\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "Makefilen ”%s” kan loopa; återskapas inte.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Misslyckades med att återskapa makefilen ”%s”."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Den inkluderade makefilen ”%s” fanns inte."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Makefilen ”%s” fanns inte"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Kunde inte återgå till ursprungskatalogen."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Utför på nytt[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "avlänka (temporärfil): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL innehåller fler än ett mål"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Inga mål angavs och ingen makefil hittades"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Inga mål"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Uppdaterar slutmål...\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "varning:  Klockförskjutning upptäckt.  Bygget kan ha blivit ofullständigt."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Användning: %s [flaggor] [mål] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1272,7 +1219,7 @@ msgstr ""
 "\n"
 "Detta program byggdes för %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1281,34 +1228,34 @@ msgstr ""
 "\n"
 "Detta program byggdes för %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr ""
 "Anmäl fel till <bug-make@gnu.org>.\n"
-"Skicka synpunkter på översättningen till <sv@li.org>.\n"
+"Skicka synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "flaggan ”%s%s” kräver ett strängargument som inte är tomt"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "flaggan ”-%c” kräver ett positivt heltal som argument"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sByggt för %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sByggt för %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1321,7 +1268,7 @@ msgstr ""
 "%sDetta är fri programvara. du får lov att ändra och vidaredistribuera den.\n"
 "%sDet finns INGEN GARANTI, så långt lagen tillåter.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1330,7 +1277,7 @@ msgstr ""
 "\n"
 "# Make-databas, utskriven %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1339,29 +1286,29 @@ msgstr ""
 "\n"
 "# Färdigställde Make-databas %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Okänt fel %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: användare %lu (verklig %lu), grupp %lu (verklig %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Åtkomst inledd"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Användaråtkomst"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Make-åtkomst"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Barnåtkomst"
 
@@ -1406,9 +1353,8 @@ msgid "%s[%u]: Leaving directory '%s'\n"
 msgstr "%s[%u]: Lämnar katalogen ”%s”\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "skrivfel: %s"
+msgstr "skrivfel: standard ut"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1424,362 +1370,397 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "skapar jobbrör"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "duplicerar jobbrör"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "iordningställer rör till jobbserver"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "internt fel: ogiltig sträng --jobserver-auth ”%s”"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Jobbserverklient (fb %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "rör till jobbserver"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "skriver till jobbserver"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "pselect jobbrör"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "läser från jobbledning"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Läser makefiler...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "Läser makefilen ”%s”"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (inget standardmål)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (sökväg)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (oviktigt)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (ingen ~-expansion)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "Hoppar över UTF-8-BOM i makefilen ”%s”\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "Hoppar över UTF-8-BOM i makefile-buffert\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "ogiltig syntax i villkorssats"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: misslyckades att ladda"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "recept inleds före första målet"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "regel saknas före recept"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (var avsikten TAB i stället för 8 mellanslag?)"
+msgstr "separator saknas (var avsikten TAB i stället för 8 mellanslag?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "separator saknas%s"
+msgstr "separator saknas"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "målmönster saknas"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "flera målmönster"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "målmönstret innehåller inget ”%%”"
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "”endif” saknas"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "tomt variabelnamn"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "överflödig text efter direktivet ”define”"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "”endef” saknas, oavslutad ”define”"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "överflödig text efter direktivet ”endef”"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "överflödig text efter direktivet ”%s”"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "överflödigt ”%s”"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "endast ett ”else” per villkor"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Felformad målberoende variabeldefinition"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "beroenden kan inte definieras i recept"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "blandade implicita regler och statiska mönsterregler"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "blandade implicita regler och normala regler"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "målet ”%s” motsvarar inte målmönstret"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "målfilen ”%s” har både poster med : och ::"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "målet ”%s” anges flera gånger i samma regel"
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "varning: åsidosätter recept för målet ”%s”"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "varning: ignorerar gammalt recept för målet ”%s”"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "blandade implicita regler och normala regler"
+msgstr "*** blandade implicita regler och normala regler: föråldrad syntax"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "varning: NUL-tecken upptäckt, bortser från resten av raden"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Inget behöver göras för ”%s”."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "”%s” är aktuell."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Beskär filen ”%s”.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%sIngen regel för att skapa målet ”%s”, som behövs av ”%s”%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sIngen regel för att skapa målet ”%s”%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Överväger målfilen ”%s”.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Misslyckades nyligen med att uppdatera filen ”%s”.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Filen ”%s” har redan övervägts.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Uppdaterar fortfarande filen ”%s”.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Slutförde uppdaterandet av filen ”%s”.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Filen ”%s” finns inte.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
 msgstr ""
 "*** Varning: .LOW_RESOLUTION_TIME-filen ”%s” har en högupplöst tidsstämpel"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Hittade en implicit regel för ”%s”.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Hittade ingen implicit regel för ”%s”.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Använder standardrecept för ”%s”.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Det cirkulära beroendet %s <- %s släpptes."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Avslutade förutsättningarna för målfilen ”%s”.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Förutsättningarna för ”%s” skapas.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Ger upp med målfilen ”%s”.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Målet ”%s” återskapades inte på grund av fel."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Förutsättningen ”%s” för målet ”%s” är endast ordning.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Förutsättningen ”%s” för målet ”%s” finns inte.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Förutsättningen ”%s” är nyare än målet ”%s”.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Förutsättningen ”%s” är äldre än målet ”%s”.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "Målet ”%s” är dubbelkolon och har inga förutsättningar.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "Inget recept för ”%s” och inga förutsättningar har förändrats.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Skapar ”%s” på grund av flaggan always-make.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "Inget behov att återskapa målet ”%s”"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; använder VPATH-namnet ”%s”"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Måste återskapa målet ”%s”.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  Bortser från VPATH-namnet ”%s”.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Receptet för ”%s” körs.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Misslyckades med att återskapa målfilen ”%s”.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Återskapade målfilen ”%s”.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Målfilen ”%s” behöver återskapas med -q.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Använder standardkommandon för ”%s”.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
-msgstr "Varning: Filen ”%s” har ett ändringstid i framtiden"
+msgstr "Varning: Filen ”%s” har en ändringstid i framtiden"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Varning: Filen ”%s” har en ändringstid %s s i framtiden"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ".LIBPATTERNS-elementet ”%s” är inte ett mönster"
@@ -1789,7 +1770,7 @@ msgstr ".LIBPATTERNS-elementet ”%s” är inte ett mönster"
 msgid "Customs won't export: %s\n"
 msgstr "Customs kommer inte att exportera %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1797,7 +1778,7 @@ msgstr ""
 "\n"
 "# Implicita regler"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1805,7 +1786,7 @@ msgstr ""
 "\n"
 "# Inga implicita regler."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1814,11 +1795,11 @@ msgstr ""
 "\n"
 "# %u implicita regler, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " slutregler."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "FEL: num_pattern_rules är felaktigt!  %u != %u"
@@ -1979,7 +1960,7 @@ msgstr "Informationsbegäran"
 msgid "Floating point co-processor not available"
 msgstr "Flyttalsprocessor inte tillgänglig"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -1988,7 +1969,7 @@ msgstr ""
 "\n"
 "%s Inga strcache-buffertar\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -1999,7 +1980,7 @@ msgstr ""
 "%s strcache-buffertar: totalt = %lu (%lu) / strängar = %lu / lagring = %lu "
 "B / snitt = %lu B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
@@ -2007,19 +1988,19 @@ msgstr ""
 "%s aktuell buf: storlek = %hu B / använt = %hu B / antal = %hu / snitt = %hu "
 "B\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s annat använt: totalt = %lu B / antal = %lu / snitt = %lu B\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 "%s annat ledigt: totalt = %lu B / max = %lu B / min = %lu B / snitt = %hu B\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2028,7 +2009,7 @@ msgstr ""
 "\n"
 "%s strcache-prestanda: uppslagningar = %lu / träffsäkerhet = %lu %%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2036,44 +2017,44 @@ msgstr ""
 "# statistik för hashtabell:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "automatisk"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "normal"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "miljö"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefil"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "miljö enligt -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "kommandorad"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "”override”-direktiv"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (från ”%s”, rad %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# statistik för variabelmängd-hashtabell:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2081,7 +2062,7 @@ msgstr ""
 "\n"
 "# Variabler\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2089,7 +2070,7 @@ msgstr ""
 "\n"
 "# Mönsterspecifika variabelvärden"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2097,7 +2078,7 @@ msgstr ""
 "\n"
 "# Inga mönsterspecifika variabelvärden."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2116,87 +2097,37 @@ msgstr "varning: odefinierad variabel ”%.*s”"
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() misslyckades med %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Varning: Tom omdirigering\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "internt fel: ”%s” command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr "-varning, CTRL-Y-hantering kanske behöver återställas från DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "INBYGGT [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "INBYGGT CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "INBYGGT CD %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Okänt inbyggt kommando \"%s\"\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
+#: vmsjobs.c:1228
 #, c-format
-msgid "Error, empty command\n"
-msgstr "Fel, tomt kommando\n"
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Inkanal omdirigerad till %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Felkanal omdirigerad till %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Lägg till utdata till %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Utkanal omdirigerad till %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Lägg till %.*s och rensa upp\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Utför %s i stället\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Fel vid avknoppning, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2204,11 +2135,11 @@ msgstr ""
 "\n"
 "# VPATH-sökvägar\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# Inga ”vpath”-sökvägar."
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2217,7 +2148,7 @@ msgstr ""
 "\n"
 "# %u ”vpath”-sökvägar.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2225,7 +2156,7 @@ msgstr ""
 "\n"
 "# Ingen allmän sökväg (enligt ”VPATH”-variabeln)."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2235,17 +2166,33 @@ msgstr ""
 "# Allmän sökväg (enligt ”VPATH”-variabeln):\n"
 "# "
 
-#~ msgid "internal error: multiple --sync-mutex options"
-#~ msgstr "internt fel: flera flaggor ”--sync-mutex”"
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Jobbserverfack begränsat till %d\n"
 
-#~ msgid "internal error: multiple --jobserver-fds options"
-#~ msgstr "internt fel: flera \"--jobserver-fds\"-flaggor"
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "skapar jobbserversemafor: (Fel %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr "Internt fel: kan inte öppna jobbserversemaforen ”%s”: (Fel %ld: %s)"
 
-#~ msgid "virtual memory exhausted"
-#~ msgstr "virtuellt minne uttömt"
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Jobbserverklient (semafor %s)\n"
 
-#~ msgid "write error"
-#~ msgstr "skrivfel"
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "släpp jobbserversemafor: (Fel %ld: %s)"
 
-#~ msgid "BUILTIN RM %s\n"
-#~ msgstr "INBYGGT RM %s\n"
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "väntan på semafor eller barnprocess: (Fel %ld: %s)"
index 6a3ede8..c6ba8b0 100644 (file)
Binary files a/po/tr.gmo and b/po/tr.gmo differ
index 79aa807..5005242 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: make 3.81\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
 "PO-Revision-Date: 2006-04-23 08:45+0300\n"
 "Last-Translator: Nilgün Belma Bugüner <nilgun@buguner.name.tr>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -46,84 +46,84 @@ msgstr "Dokunulup geçildi: Üye `%s', `%s' içinde yok"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "Dokunulup geçildi: `%s' deki ar_member_touch'dan dönen kod hatalı"
 
-#: arscan.c:124
+#: arscan.c:130
 #, fuzzy, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr "lbr$set_module modül bilgisini çıkarırken başarısız oldu, durum = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, fuzzy, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control durum =%d ile başarısız oldu"
 
-#: arscan.c:255
+#: arscan.c:261
 #, fuzzy, c-format
 msgid "unable to open library '%s' to lookup member status %d"
 msgstr "`%s' kaynakçası `%s' üyesine bakmak için açılamadı"
 
-#: arscan.c:944
+#: arscan.c:965
 #, fuzzy, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Üye `%s'%s: %ld bayt  %ld 'de (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr "(isim kırpılmış olmalı)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Tarih %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  Kull-kim = %d, Grup-kim = %d, kip = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr ""
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Bırakıldı.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, fuzzy, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Arşiv üyesi `%s' sahte olabilir; silinmedi"
 
-#: commands.c:633
+#: commands.c:631
 #, fuzzy, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Arşiv üyesi `%s' sahte olabilir; silinmedi"
 
-#: commands.c:647
+#: commands.c:645
 #, fuzzy, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] `%s' dosyası siliniyor"
 
-#: commands.c:649
+#: commands.c:647
 #, fuzzy, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** `%s' dosyası siliniyor"
 
-#: commands.c:685
+#: commands.c:683
 #, fuzzy
 msgid "#  recipe to execute"
 msgstr "#  çalıştırma komutları"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (paket içinde):"
 
-#: commands.c:690
+#: commands.c:688
 #, fuzzy, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (`%s'den, satır %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -131,62 +131,62 @@ msgstr ""
 "\n"
 "# Dizin\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: durumlanamadı.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (anahtar (key) %s, değişiklik tarihi (mtime) %d): açılamadı.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (aygıt %d, i-düğüm [%d,%d,%d]): açılamadı.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (aygıt %ld, i-düğüm %ld): açılamadı.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (anahtar (key) %s, değişiklik tarihi (mtime) %d):"
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (aygıt %d, i-düğüm [%d,%d,%d]):"
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (aygıt %ld, i-düğüm %ld):"
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Hayır"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " dosyaları,"
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "hayır"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr "olanaksızlıklar"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " çok uzak."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " %lu dizinde olanaksızlıklar.\n"
@@ -196,163 +196,163 @@ msgstr " %lu dizinde olanaksızlıklar.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Çevrimsel değişken `%s' tekrar kendine bağıntılı (sonuçta)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "sonlandırılmamış değişken bağıntısı"
 
-#: file.c:271
+#: file.c:278
 #, fuzzy, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "`%s' dosyası için komutlar %s:%lu de belirtildi,"
 
-#: file.c:276
+#: file.c:283
 #, fuzzy, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr "`%s' dosyası için komutlar örtük kural aramasında bulundu,"
 
-#: file.c:280
+#: file.c:287
 #, fuzzy, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "fakat `%s' şimdi `%s' dosyası ile aynı dosya olarak düşünülmeli."
 
-#: file.c:283
+#: file.c:290
 #, fuzzy, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "`%s' dosyası için komutlar `%s' lehine yoksayılmış olacak."
 
-#: file.c:303
+#: file.c:310
 #, fuzzy, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "tek-sütun `%s', çift-sütun `%s' olarak yeniden adlandırılamaz"
 
-#: file.c:309
+#: file.c:316
 #, fuzzy, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "çift-sütun `%s', tek-sütun `%s' olarak yeniden adlandırılamaz"
 
-#: file.c:401
+#: file.c:408
 #, fuzzy, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Aracı dosya `%s' siliniyor"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "Aracı dosyalar siliniyor...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Şu an"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Tarih damgası kapsamdışı; yerine %s kullanılıyor"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Bir hedef değil:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Kıymetli dosya (.PRECIOUS  önceden gerekliliği)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Sahte hedef (.PHONY önceden gerekliliği)."
 
-#: file.c:964
+#: file.c:971
 #, fuzzy
 msgid "#  Command line target."
 msgstr "#  Komut-satırı hedefi."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Bir öntanımlı,MAKEFILES veya -include/sinclude makefile."
 
-#: file.c:968
+#: file.c:975
 #, fuzzy
 msgid "#  Builtin rule"
 msgstr ""
 "\n"
 "# Örtük kural yok."
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Örtük kural araştırması yapılmıştı."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Örtük kural araştırması yapılmamıştı."
 
-#: file.c:973
+#: file.c:980
 #, fuzzy, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Örtük/değişmeyen kalıp kökü: `%s'\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr ""
 "#  Orta seviyede önceden gerekli bir dosya (öncelikle gerekli dosyalara "
 "aracılık eden dosya)"
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Oluştursa da:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Değişiklik zamanı hiç kontrol edilmedi."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Dosya yok."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Dosya çok eski."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Son değişiklik tarihi %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Dosya güncelleştirilmişti."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Dosya güncelleştirilmemişti."
 
-#: file.c:1001
+#: file.c:1008
 #, fuzzy
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Komutlar şu an işlemlerini sürdürüyor (BU BİR YAZILIM HATASI)."
 
-#: file.c:1004
+#: file.c:1011
 #, fuzzy
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr ""
 "#  Bağımlılıkların komutları işlemlerini sürdürüyor (BU BİR YAZILIM HATASI)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#   Tamamen güncellendi."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#   Güncellenmiş olması gerekir (-q verildi)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Güncellenmiş olamadı."
 
-#: file.c:1025
+#: file.c:1032
 #, fuzzy
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  `command_state' üyesinde geçersiz değer!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -360,7 +360,7 @@ msgstr ""
 "\n"
 "# Dosyalar"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -370,108 +370,126 @@ msgstr ""
 "# dosyaların hash tablosu durumları:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr ""
 
-#: function.c:780
+#: function.c:790
 #, fuzzy
 msgid "non-numeric first argument to 'word' function"
 msgstr "`word' işlevinde sayısal olmayan ilk argüman"
 
-#: function.c:785
+#: function.c:795
 #, fuzzy
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "`word' işlevinin ilk argümanı sıfırdan büyük olmalı"
 
-#: function.c:805
+#: function.c:815
 #, fuzzy
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "`wordlist' işlevinde sayısal olmayan ilk argüman"
 
-#: function.c:807
+#: function.c:817
 #, fuzzy
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "`wordlist' işlevinde sayısal olmayan ikinci argüman"
 
-#: function.c:1499
+#: function.c:1525
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "create_child_process: DuplicateHandle(In) başarısız (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, fuzzy, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "create_child_process: DuplicateHandle(Err) başarısız (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() başarısız (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 #, fuzzy
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe (): process_init_fd() başarısız\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Geçici komut-listesi (batch) dosyası %s temizleniyor\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr ""
+
+#: function.c:2219 function.c:2250
 #, fuzzy, c-format
 msgid "open: %s: %s"
 msgstr "%s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, fuzzy, c-format
 msgid "write: %s: %s"
 msgstr "yazma hatası: %s"
 
-#: function.c:2209
-#, c-format
-msgid "Invalid file operation: %s"
+#: function.c:2230 function.c:2267
+#, fuzzy, c-format
+msgid "close: %s: %s"
+msgstr "%s%s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
 msgstr ""
 
-#: function.c:2324
+#: function.c:2262
+#, fuzzy, c-format
+msgid "read: %s: %s"
+msgstr "%s: %s"
+
+#: function.c:2275
+#, fuzzy, c-format
+msgid "file: invalid file operation: %s"
+msgstr "%s: geçersiz seçenek -- %c\n"
+
+#: function.c:2390
 #, fuzzy, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "argüman sayısı (%d) `%s' işlevinde yetersiz"
 
-#: function.c:2336
+#: function.c:2402
 #, fuzzy, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "bu platformda gerçekleştirilmemiş: işlev `%s'"
 
-#: function.c:2399
+#: function.c:2466
 #, fuzzy, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "`%s' işlemine çağrı sonlandırılmamış: `%c' kayıp"
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
 msgstr ""
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
 msgstr ""
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
 msgstr ""
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
+msgid "Invalid minimum argument count (%u) for function %s"
 msgstr "argüman sayısı (%d) `%s' işlevinde yetersiz"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
+msgid "Invalid maximum argument count (%u) for function %s"
 msgstr "argüman sayısı (%d) `%s' işlevinde yetersiz"
 
 #: getopt.c:659
@@ -569,7 +587,7 @@ msgstr "`%s' için bir örtük kural arıyor.\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "`%s' için arşiv-üyesi örtük kural arıyor.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Örtük kural çevrimi görmezden geliniyor.\n"
 
@@ -613,102 +631,78 @@ msgstr "Önceden gereklilik `%s' VPATH `%s' olarak bulundu.\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Aracı dosya `%s' ile bir kural arıyor.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Bir geçici dosya oluşturulamıyor\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (bellek kopyası - core dosyası - diske yazıldı)"
 
-#: job.c:488
+#: job.c:490
 #, fuzzy
 msgid " (ignored)"
 msgstr "[%s] Hata %d (yoksayıldı)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 #, fuzzy
 msgid "<builtin>"
 msgstr " (paket içinde):"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr ""
-
-#: job.c:516 job.c:524
+#: job.c:510
 #, fuzzy, c-format
-msgid "%s[%s] Error %d%s"
+msgid "%s[%s: %s] Error %d%s"
 msgstr "*** [%s] Hata %d"
 
-#: job.c:519
-#, fuzzy, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "*** [%s] Hata 0x%x"
-
-#: job.c:529
-#, fuzzy, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s%s: %s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Bitmemiş işler için bekliyor...."
 
-#: job.c:651
+#: job.c:629
 #, fuzzy, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Ast dosya işini sürdürüyor: 0x%08lx (%s) PID %ld %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (karşıdan)"
 
-#: job.c:841
+#: job.c:831
 #, fuzzy, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Kaybeden ast dosya sağlanıyor: 0x%08lx PID %ld %s\n"
 
-#: job.c:842
+#: job.c:832
 #, fuzzy, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Kazanan ast dosya sağlanıyor: 0x%08lx PID %ld %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Geçici komut-listesi dosyası %s temizleniyor\n"
 
-#: job.c:855
+#: job.c:845
 #, fuzzy, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Geçici komut-listesi dosyası %s temizleniyor\n"
 
-#: job.c:961
+#: job.c:951
 #, fuzzy, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Ast 0x%08lx PID %ld%s zincirden kaldırılıyor\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, fuzzy, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Ast 0x%08lx (%s) için simge (token) kullanıma sunuldu.\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "iş-sunucusu yazıyor"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "Süreci başlatacak process_easy() başarısız oldu (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -717,114 +711,110 @@ msgstr ""
 "\n"
 "Sayılan %d argüman ile başarısız oldu\n"
 
-#: job.c:1735
+#: job.c:1581
 #, fuzzy, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Ast 0x%08lx (%s) PID %ld%s zincire konuluyor.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:2019
+#: job.c:1811
 #, fuzzy, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Ast 0x%08lx (%s) için simge (token) sağlandı.\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "görev listesi okunuyor"
-
-#: job.c:2056
+#: job.c:1838
 #, fuzzy, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "Dokunulup geçildi: Arşiv `%s' yok"
 
-#: job.c:2059
+#: job.c:1841
 #, fuzzy, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr ""
 "%sHedef `%s' i derlemek için  hiçbir kural yok, `%s' tarafından gereksinim "
 "duyuluyor%s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "işletim sisteminde yük sınırlarına ulaşılamadı "
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "ulaşılamayan yük sınırı: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "başka dosya tutucu yok: standart girdi kopyalanamadı\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "başka dosya tutucu yok: standart çıktı kopyalanamadı\n"
 
-#: job.c:2278
+#: job.c:2074
 #, fuzzy
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "başka dosya tutucu yok: standart girdi kopyalanamadı\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Standart girdi eski haline getirilemedi\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Standart çıktı eski haline getirilemedi\n"
 
-#: job.c:2309
+#: job.c:2105
 #, fuzzy
 msgid "Could not restore stderr\n"
 msgstr "Standart girdi eski haline getirilemedi\n"
 
-#: job.c:2420
+#: job.c:2234
 #, fuzzy, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "make %ld pid'li ast süreci kaldırdı ama hala pid %ld için bekliyor\n"
 
-#: job.c:2458
-#, c-format
-msgid "%s: Command not found"
+#: job.c:2275
+#, fuzzy, c-format
+msgid "%s: %s: Command not found\n"
 msgstr "%s: Komut bulunamadı"
 
-#: job.c:2518
+#: job.c:2277
+#, fuzzy, c-format
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s: Komut bulunamadı"
+
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Kabuk uygulaması bulunamadı"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: ortam alanı tükenmiş olabilir"
 
-#: job.c:2765
+#: job.c:2584
 #, fuzzy, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL değişti (`%s' idi, şimdi `%s')\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "%s geçici komut-liste dosyasını oluşturuyor\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
 msgstr ""
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
 "\t%s\n"
 msgstr ""
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (satır %d) kabuk bağlamı hatalı (!unixy && !batch_mode_shell)\n"
@@ -853,58 +843,58 @@ msgstr ""
 msgid "Empty symbol name for load: %s"
 msgstr ""
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr ""
 
-#: load.c:244
+#: load.c:256
 #, fuzzy
 msgid "The 'load' operation is not supported on this platform."
 msgstr "Bu platformda paralel işler (-j) desteklenmiyor."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Seçenekler:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Uyumluluk için yoksayıldı.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr ""
 "  -B, --always-make           Tüm hedefler koşulsuz olarak oluşturulur.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
 msgstr "  -C DİZİN, --directory=DIZIN Birşey yapmadan önce DİZİNe geçilir.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -b, -m                      Bir sürü hata ayıklama bilgisi basar.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=SEÇENEKLER]        Çeşitli türde hata ayıklama bilgileri basar.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
 msgstr ""
 "  -e, --environment-overrides Ortam değişkenleri makefile'ları değiştirir.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -912,16 +902,16 @@ msgstr ""
 "  -f DOSYA, --file=DOSYA, --makefile=DOSYA\n"
 "                              DOSYAyı bir makefile olarak okur.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Bu iletiyi basar ve çıkar.\n"
 
-#: main.c:335
+#: main.c:360
 #, fuzzy
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr "  -i, --ignore-errors         Komutların ürettiği hataları yoksayar.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -929,7 +919,7 @@ msgstr ""
 "  -I DİZİN, --include-dir=DİZİN\n"
 "                              Eklenecek makefile'ları DİZİNde arar.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -937,13 +927,13 @@ msgstr ""
 "  -j [N], --jobs[=N]          Bir defada N işe izin verir; argumansız iş\n"
 "                              sayısı sınırsızdır.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Bazı hedefler yapılmadığında devam eder.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -953,7 +943,7 @@ msgstr ""
 "                              Yük N'den az olmadıkça çoklu işler "
 "başlatılmaz.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -961,7 +951,7 @@ msgstr ""
 "  -L, --check-symlink-times   sembolik bağlarla hedef arasında en son mtime\n"
 "                              kullanılır\n"
 
-#: main.c:349
+#: main.c:374
 #, fuzzy
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
@@ -971,7 +961,7 @@ msgstr ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Gerçekte komutlar çalıştırılmaz, gösterilir.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -981,17 +971,17 @@ msgstr ""
 "                              DOSYAnın çok eski olduğu varsayılır ve\n"
 "                              yeniden işlem yapılmaz.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       make'in içsel veritabanını basar.\n"
 
-#: main.c:360
+#: main.c:385
 #, fuzzy
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
@@ -999,49 +989,49 @@ msgid ""
 msgstr ""
 "  -q, --question              Komut çalıştırmaz; güncelse çıkışta belirtir\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr ""
 "  -r, --no-builtin-rules      Oluşumiçi örtük kuralları etkisizleştirir.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr ""
 "  -R, --no-builtin-variables  Oluşumiçi değişken ayarlarını etkisizleştirir\n"
 
-#: main.c:366
+#: main.c:391
 #, fuzzy
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet     Komutlar işlenirken gösterilmez.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
 msgstr ""
 "  -S, --no-keep-going, --stop Bazı hedefler yapılmadığında devam etmez.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Yeniden derlemek yerine hedeflere bakıp "
 "geçer.\n"
 
-#: main.c:373
+#: main.c:398
 #, fuzzy
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  -b, -m                      Bir sürü hata ayıklama bilgisi basar.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr "  -v, --version               make sürüm numarasını basar ve çıkar.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Kullanılan dizini basar.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1049,7 +1039,7 @@ msgstr ""
 "  --no-print-directory        Dolaylı olarak açılmış olsa bile -w 'yi "
 "kapatır\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1057,7 +1047,7 @@ msgstr ""
 "  -W DOSYA, --what-if=DOSYA, --new-file=DOSYA, --assume-new=DOSYA\n"
 "                              DOSYA sonsuz yeni varsayılır.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1065,26 +1055,26 @@ msgstr ""
 "  --warn-undefined-variables  Atanmamış bir değişkene bağıntı yapıldığında\n"
 "                              uyarır.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "dosyaismi olarak boş dizge geçersiz"
 
-#: main.c:737
+#: main.c:766
 #, fuzzy, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "Hata ayıklama düzeyi özelliği `%s' bilinmiyor"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr ""
 
-#: main.c:828
+#: main.c:861
 #, fuzzy, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: Kesinti/Olağandışı durum saptandı (kod = 0x%lx, adres = 0x%lx)\n"
 
-#: main.c:835
+#: main.c:868
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -1099,67 +1089,38 @@ msgstr ""
 "OlağandışılıkBayrakları = %lx\n"
 "OlağandışılıkAdresi = %lx\n"
 
-#: main.c:843
+#: main.c:876
 #, fuzzy, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Erişim uyumsuzluğu: %lx adresinde yazma işlemi\n"
 
-#: main.c:844
+#: main.c:877
 #, fuzzy, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Erişim uyumsuzluğu: %lx adresinde okuma işlemi\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, fuzzy, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell default_shell = %s olarak belirliyor\n"
 
-#: main.c:988
+#: main.c:1021
 #, fuzzy, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr ""
 "find_and_set_shell yol aramasını default_shell = %s olarak belirliyor\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s 30 saniyeliğine askıya alınıyor..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "sleep(30) bitti. Devam ediliyor.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr ""
-
-#: main.c:1534
-#, fuzzy, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "içsel hata: --jobserver-fds dizgesi `%s' geçersiz"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr ""
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr "uyarı: alt derlemede -jN zorlandı: iş sunucusu kipi kapatılıyor."
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "çift iş sunucusu"
-
-#: main.c:1570
+#: main.c:1627
 #, fuzzy
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
@@ -1167,111 +1128,97 @@ msgstr ""
 "uyarı: iş sunucusu kullanımdışı: -j1 kullanılıyor. Üst make kuralına `+' "
 "ekle."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr "uyarı: alt derlemede -jN zorlandı: iş sunucusu kipi kapatılıyor."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefile standart girdiden iki kez belirtildi."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (geçici dosya)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (geçici dosya)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Bu platformda paralel işler (-j) desteklenmiyor."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Tek iş kipi (-j1) için make'i başlatma konumuna alıyor"
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr ""
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "işleri yaratıyor"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "işleri hazırlıyor"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Sembolik bağlar desteklenmiyor: -L iptal ediliyor"
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "makefile'ları güncelliyor...\n"
 
-#: main.c:2158
+#: main.c:2195
 #, fuzzy, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "`%s' make dosyası çevrime girdi; yeniden derlenemez.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, fuzzy, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "`%s' make dosyası yeniden derlenemiyor."
 
-#: main.c:2257
+#: main.c:2303
 #, fuzzy, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "İçerilen make dosyası `%s' bulunamadı."
 
-#: main.c:2262
+#: main.c:2308
 #, fuzzy, c-format
 msgid "Makefile '%s' was not found"
 msgstr "`%s' make dosyası bulunamadı"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Geriye, özgün dizine geçilemiyor."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Yeniden çalıştırılıyor[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (geçici dosya): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL bir hedeften fazlasını içeriyor"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Hedefler belirtilmediğinden make dosyası yok"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Hedef yok"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Amaçlanan hedefler güncelleniyor...\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr "uyarı:  Clock skew saptandı. Derleme tamamlanamayabilir."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Kullanım: %s [seçenekler] [hedef] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1280,7 +1227,7 @@ msgstr ""
 "\n"
 "Bu program %s için kurgulanmış\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1289,38 +1236,38 @@ msgstr ""
 "\n"
 "Bu program %s için kurgulanmış (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr ""
 "Yazılım hatalarını <bug-make@gnu.org> adresine,\n"
 "çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, fuzzy, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "`-%c' seçeneği bir boş olmayan dizge argüman gerektirir"
 
-#: main.c:2871
+#: main.c:2933
 #, fuzzy, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "`-%c' seçeneği bir pozitif tümleyici bağımsız değişkenle kullanılır"
 
-#: main.c:3269
+#: main.c:3331
 #, fuzzy, c-format
 msgid "%sBuilt for %s\n"
 msgstr ""
 "\n"
 "%sBu program %s için derlenmiş\n"
 
-#: main.c:3271
+#: main.c:3333
 #, fuzzy, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr ""
 "\n"
 "%sBu program %s için derlenmiş (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1329,7 +1276,7 @@ msgid ""
 "%sThere is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1338,7 +1285,7 @@ msgstr ""
 "\n"
 "# Make veri tabanı, %s üzerine basıldı"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1347,29 +1294,29 @@ msgstr ""
 "\n"
 "# %s üzerindeki Make veri tabanı tamamlandı\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Bilinmeyen hata %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: kullanıcı %lu (gerçekte %lu), grup %lu (gerçekte %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "İlklendirilmiş erişim"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Kullanıcı erişimi"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Make erişimi"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Asta erişim"
 
@@ -1432,235 +1379,276 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "işleri yaratıyor"
+
+#: posixos.c:72 posixos.c:227
+#, fuzzy
+msgid "duping jobs pipe"
+msgstr "işleri yaratıyor"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "işleri hazırlıyor"
+
+#: posixos.c:90
+#, fuzzy, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "içsel hata: --jobserver-fds dizgesi `%s' geçersiz"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr ""
+
+#: posixos.c:109
+#, fuzzy
+msgid "jobserver pipeline"
+msgstr "işleri hazırlıyor"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "iş-sunucusu yazıyor"
+
+#: posixos.c:268
+#, fuzzy
+msgid "pselect jobs pipe"
+msgstr "görev listesi okunuyor"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "görev listesi okunuyor"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Makefile'lar okunuyor...\n"
 
-#: read.c:335
+#: read.c:329
 #, fuzzy, c-format
 msgid "Reading makefile '%s'"
 msgstr "`%s' make dosyası okunuyor"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (öntanımlı amaç yok)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (arama yolu)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (umurunda değil)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr "( ~ uzantısı yok)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr ""
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr ""
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "şartlı ifade de yazılış hatası"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr ""
 
-#: read.c:992
+#: read.c:985
 #, fuzzy
 msgid "recipe commences before first target"
 msgstr "komutlar ilk hedeften önce başlıyor"
 
-#: read.c:1041
+#: read.c:1034
 #, fuzzy
 msgid "missing rule before recipe"
 msgstr "komutlardan önceki kural kayıp"
 
-#: read.c:1131
+#: read.c:1124
 #, fuzzy
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
 msgstr "(8 boşluğu TAB'mı zannettiniz?)"
 
-#: read.c:1133
+#: read.c:1126
 #, fuzzy
 msgid "missing separator"
 msgstr "kayıp ayraç%s"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "hedef kalıp kayıp"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "çok sayıda hedef kalıp"
 
-#: read.c:1276
+#: read.c:1268
 #, fuzzy, c-format
 msgid "target pattern contains no '%%'"
 msgstr "hedef kalıp `%%' içermiyor"
 
-#: read.c:1398
+#: read.c:1390
 #, fuzzy
 msgid "missing 'endif'"
 msgstr "`endif' kayıp"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "boş değişken ismi"
 
-#: read.c:1471
+#: read.c:1463
 #, fuzzy
 msgid "extraneous text after 'define' directive"
 msgstr "`endef' yönergesinden sonraki metin yersiz"
 
-#: read.c:1496
+#: read.c:1488
 #, fuzzy
 msgid "missing 'endef', unterminated 'define'"
 msgstr "`endef' kayıp, `define' sonlandırılmamış"
 
-#: read.c:1524
+#: read.c:1516
 #, fuzzy
 msgid "extraneous text after 'endef' directive"
 msgstr "`endef' yönergesinden sonraki metin yersiz"
 
-#: read.c:1595
+#: read.c:1588
 #, fuzzy, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "`%s' yönergesinden sonraki metin yersiz"
 
-#: read.c:1596
+#: read.c:1589
 #, fuzzy, c-format
 msgid "extraneous '%s'"
 msgstr "`%s' yersiz"
 
-#: read.c:1624
+#: read.c:1617
 #, fuzzy
 msgid "only one 'else' per conditional"
 msgstr "her şartlı ifade de sadece bir `else'"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Hedefe özgü değişken tanımı bozuk"
 
-#: read.c:1957
+#: read.c:1950
 #, fuzzy
 msgid "prerequisites cannot be defined in recipes"
 msgstr "öngereksinimler komut betiklerinde tanımlanamaz"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "örtük ve durağan kalıp kuralları karışmış"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "örtük ve normal kurallar karışmış"
 
-#: read.c:2091
+#: read.c:2085
 #, fuzzy, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "hedef `%s' hedef kalıpla eşleşmiyor"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, fuzzy, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "hedef dosya `%s'hem : hem de :: girdilerine sahip"
 
-#: read.c:2112
+#: read.c:2106
 #, fuzzy, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "hedef `%s' aynı kuralda birden fazla belirtilmiş."
 
-#: read.c:2122
+#: read.c:2116
 #, fuzzy, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "uyarı: hedef `%s' için komutlar geçersiz kılınıyor"
 
-#: read.c:2125
+#: read.c:2119
 #, fuzzy, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "uyarı: hedef `%s' için eski komutlar yoksayılıyor"
 
-#: read.c:2229
+#: read.c:2223
 #, fuzzy
 msgid "*** mixed implicit and normal rules: deprecated syntax"
 msgstr "örtük ve normal kurallar karışmış"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "uyarı: NUL karakteri görüldü; satırın geri kalanı yoksayılıyor"
 
-#: remake.c:230
+#: remake.c:225
 #, fuzzy, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "`%s' için hiçbir şey yapılmadı."
 
-#: remake.c:231
+#: remake.c:226
 #, fuzzy, c-format
 msgid "'%s' is up to date."
 msgstr "`%s' güncel"
 
-#: remake.c:303
+#: remake.c:322
 #, fuzzy, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Budanmış dosya `%s'.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr ""
 "%sHedef `%s' i derlemek için  hiçbir kural yok, `%s' tarafından gereksinim "
 "duyuluyor%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, fuzzy, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sHedef `%s' i derlemek için  hiçbir kural yok%s"
 
-#: remake.c:426
+#: remake.c:441
 #, fuzzy, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "hedef dosya `%s' hesaba katılıyor.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, fuzzy, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "En son `%s'dosyasının güncellenmesi denendi ve başarısız oldu.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, fuzzy, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "`%s' dosyası zaten hesaba katıldı.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, fuzzy, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "`%s' dosyası hala güncelleniyor.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, fuzzy, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "`%s' dosyasının güncellenmesi tamamlandı.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, fuzzy, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "`%s' dosyası yok.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, fuzzy, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1668,137 +1656,137 @@ msgstr ""
 "*** Uyarı: .LOW_RESOLUTION_TIME dosyası `%s' yüksek çözünürlüklü bir zaman "
 "damgası içeriyor"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, fuzzy, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "`%s' için bir örtük kural bulundu.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, fuzzy, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "`%s' için bir örtük kural yok.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, fuzzy, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "`%s' için öntanımlı komutlar kullanılıyor.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Çevrimsel %s <- %s bağımlılığı iptal edildi."
 
-#: remake.c:675
+#: remake.c:690
 #, fuzzy, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "`%s' hedef dosyasının önceden gereklilikleri tamamlandı.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, fuzzy, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "`%s' için önceden gereklilikler derlenmeye devam ediyor.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, fuzzy, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "`%s' hedef dosyasında umut kesiliyor.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, fuzzy, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Hedef `%s' hatalardan dolayı yeniden derlenemez."
 
-#: remake.c:752
+#: remake.c:767
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Önceden gerekli `%s' hedef `%s' için şart.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, fuzzy, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Hedef `%s' in önceden gereklisi `%s' mevcut değil.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Önceden gerekli `%s' hedef `%s' den daha yeni.\n"
 
-#: remake.c:765
+#: remake.c:780
 #, fuzzy, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Önceden gerekli `%s' hedef `%s' den daha eski.\n"
 
-#: remake.c:783
+#: remake.c:798
 #, fuzzy, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "Hedef `%s' çift-sütunlu ve önceden gereklilikler gerektirmiyor.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, fuzzy, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "`%s' için komutlar ve  önceden gerekliliklerde bir değişiklik yok.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, fuzzy, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Daima derle seçeneğinden dolayı `%s' derleniyor.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, fuzzy, c-format
 msgid "No need to remake target '%s'"
 msgstr "Hedef `%s' nin yeniden derlenmesine gerek yok"
 
-#: remake.c:805
+#: remake.c:820
 #, fuzzy, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; VPATH ismi `%s' kullanılıyor"
 
-#: remake.c:825
+#: remake.c:840
 #, fuzzy, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Hedef `%s' yeniden derlenmeli.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, fuzzy, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr " VPATH ismi `%s' yoksayılıyor.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, fuzzy, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "`%s' nin komutları çalışmaya devam ediyor.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, fuzzy, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Hedef dosya `%s' yeniden derlenirken hata oluştu.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, fuzzy, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Hedef dosya `%s' yeniden derlenmesi başarıyla tamamlandı.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, fuzzy, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "`%s' hedef dosyasının -q ile yeniden derlenmesi gerekir.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, fuzzy, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "`%s' için öntanımlı komutlar kullanılıyor.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Uyarı: `%s' dosyası gelecekteki bir değişiklik tarihini içeriyor"
 
-#: remake.c:1411
+#: remake.c:1443
 #, fuzzy, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Uyarı: `%s' dosyasının  değişiklik tarihi %.2g s kadar gelecekte"
 
-#: remake.c:1610
+#: remake.c:1646
 #, fuzzy, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ".LIBPATTERNS elemanı `%s' bir kalıp değil"
@@ -1808,7 +1796,7 @@ msgstr ".LIBPATTERNS elemanı `%s' bir kalıp değil"
 msgid "Customs won't export: %s\n"
 msgstr "Özelleştirilmiş olanlar dışarı aktarılmayacak: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1816,7 +1804,7 @@ msgstr ""
 "\n"
 "# Örtük Kurallar"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1824,7 +1812,7 @@ msgstr ""
 "\n"
 "# Örtük kural yok."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1833,11 +1821,11 @@ msgstr ""
 "\n"
 "# %u örtük kural, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " terminal."
 
-#: rule.c:530
+#: rule.c:531
 #, fuzzy, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "YAZILIM HATASI: num_pattern_rules yanlış!  %u != %u"
@@ -1998,14 +1986,14 @@ msgstr "Bilgi isteği"
 msgid "Floating point co-processor not available"
 msgstr "Aritmetik işlemci kullanılabilir değil"
 
-#: strcache.c:236
+#: strcache.c:274
 #, fuzzy, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
 msgstr "%s dizge belleği tamponlarının sayısı: %d\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2013,31 +2001,31 @@ msgid ""
 "B\n"
 msgstr "%s dizge belleği boş: toplam = %d / max = %d / min = %d / ort = %d\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
 msgstr ""
 
-#: strcache.c:280
+#: strcache.c:319
 #, fuzzy, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s dizge belleği boyu: toplam = %d / max = %d / min = %d / ort = %d\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, fuzzy, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr "%s dizge belleği boş: toplam = %d / max = %d / min = %d / ort = %d\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
 "%s strcache performance: lookups = %lu / hit rate = %lu%%\n"
 msgstr ""
 
-#: strcache.c:289
+#: strcache.c:328
 #, fuzzy
 msgid ""
 "# hash-table stats:\n"
@@ -2047,45 +2035,45 @@ msgstr ""
 "# dosyaların hash tablosu durumları:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "otomatik"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "öntanımlı"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "çevre"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "derleme dosyası"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "çevre -e altında"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "komut satırı"
 
-#: variable.c:1617
+#: variable.c:1647
 #, fuzzy
 msgid "'override' directive"
 msgstr "`override' yönergesi"
 
-#: variable.c:1628
+#: variable.c:1658
 #, fuzzy, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (`%s'den, satır %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# değişken kümesi hash tablosunun durumu:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2093,7 +2081,7 @@ msgstr ""
 "\n"
 "# Değişkenler\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2101,7 +2089,7 @@ msgstr ""
 "\n"
 "# Kalıba özgü Değişken Değerleri"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2109,7 +2097,7 @@ msgstr ""
 "\n"
 "# Örneğe duyarlı değişken değeri yok."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2128,89 +2116,39 @@ msgstr "uyarı: `%.*s' değişkeni atanmamış"
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search %d ile başarısız\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Uyarı: Boş yönlendirme\n"
-
-#: vmsjobs.c:183
-#, fuzzy, c-format
-msgid "internal error: '%s' command_state"
-msgstr "içsel hata: `%s' command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 "-uyarı, DCL den yönetimi almak için CTRL-Y'yi yeniden "
 "etkinleştirebilirsiniz.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "OLUŞUMİÇİ [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "OLUŞUMİÇİ CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "OLUŞUMİÇİ CD %s\n"
-
-#: vmsjobs.c:505
+#: vmsjobs.c:1228
 #, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Oluşumiçi komut '%s' bilinmiyor\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+msgid "DCL: %s\n"
 msgstr ""
 
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Hata, boş komut\n"
-
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "%s den yönlendirilmiş girdi\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "%s e yönlendirilmiş hata\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, fuzzy, c-format
 msgid "Append output to %s\n"
 msgstr "%s e yönlendirilmiş çıktı\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "%s e yönlendirilmiş çıktı\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr ""
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "%s yerine çalıştırılıyor\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "doğum hatası, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2218,12 +2156,12 @@ msgstr ""
 "\n"
 "# VPATH Arama yolu\n"
 
-#: vpath.c:600
+#: vpath.c:620
 #, fuzzy
 msgid "# No 'vpath' search paths."
 msgstr "# `vpath' arama yolları yok"
 
-#: vpath.c:602
+#: vpath.c:622
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2232,7 +2170,7 @@ msgstr ""
 "\n"
 "# %u `vpath' arama yolu.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 #, fuzzy
 msgid ""
 "\n"
@@ -2241,7 +2179,7 @@ msgstr ""
 "\n"
 "# Genel arama yolu (`VPATH' çevre değişkeni) yok."
 
-#: vpath.c:611
+#: vpath.c:631
 #, fuzzy
 msgid ""
 "\n"
@@ -2252,18 +2190,55 @@ msgstr ""
 "# Genel (`VPATH' çevre değişkeni) arama yolu:\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr ""
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr ""
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr ""
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr ""
+
 #~ msgid "#  Invalid value in `update_status' member!"
 #~ msgstr "#  `update_status' üyesinde geçersiz değer!"
 
 #~ msgid "*** [%s] Error 0x%x (ignored)"
 #~ msgstr "*** [%s] Hata 0x%x (yoksayıldı)"
 
+#~ msgid "*** [%s] Error 0x%x"
+#~ msgstr "*** [%s] Hata 0x%x"
+
 #~ msgid "process_easy() failed failed to launch process (e=%ld)\n"
 #~ msgstr "Süreci başlatmada process_easy() başarısız oldu (e=%ld)\n"
 
 #~ msgid "internal error: multiple --jobserver-fds options"
 #~ msgstr "içsel hata: çok sayıda --jobserver-fds seçeneği"
 
+#~ msgid "dup jobserver"
+#~ msgstr "çift iş sunucusu"
+
 #~ msgid ""
 #~ "%sThis is free software; see the source for copying conditions.\n"
 #~ "%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"
@@ -2297,12 +2272,36 @@ msgstr ""
 #~ "\n"
 #~ "%s dizge belleğindeki dizgelerin sayısı: %d\n"
 
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Uyarı: Boş yönlendirme\n"
+
+#~ msgid "internal error: `%s' command_state"
+#~ msgstr "içsel hata: `%s' command_state"
+
 #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n"
 #~ msgstr "-uyarı, CTRL-Y etraftaki alt-süreç(ler)i bıraktıracak.\n"
 
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "OLUŞUMİÇİ [%s][%s]\n"
+
 #~ msgid "BUILTIN RM %s\n"
 #~ msgstr "OLUŞUMİÇİ RM %s\n"
 
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Oluşumiçi komut '%s' bilinmiyor\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Hata, boş komut\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "%s den yönlendirilmiş girdi\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "%s e yönlendirilmiş hata\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "doğum hatası, %d\n"
+
 #~ msgid "Syntax error, still inside '\"'\n"
 #~ msgstr "Dosyada hala yazılış hatası var: '\"'\n"
 
index bfdbf8b..6252625 100644 (file)
Binary files a/po/uk.gmo and b/po/uk.gmo differ
index 4eefbe0..e612ebd 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -3,13 +3,13 @@
 # This file is distributed under the same license as the make package.
 #
 # Volodymyr M. Lisivka <lvm@mystery.lviv.net>, 2001-2012.
-# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2013.
+# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2013, 2014, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: make 4.0\n"
+"Project-Id-Version: make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-10-09 22:15+0300\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-24 14:36+0300\n"
 "Last-Translator: Volodymyr M. Lisivka <lvm@mystery.lviv.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
 "Language: uk\n"
@@ -22,7 +22,7 @@ msgstr ""
 #: ar.c:46
 #, c-format
 msgid "attempt to use unsupported feature: '%s'"
-msgstr "спроба вжити можливість, яка не підтримується: \"%s\""
+msgstr "спроба вжити можливість, підтримки якої не передбачено: \"%s\""
 
 #: ar.c:123
 msgid "touch archive member is not available on VMS"
@@ -36,7 +36,7 @@ msgstr "оновлення часу зміни: Архів \"%s\" не існу
 #: ar.c:150
 #, c-format
 msgid "touch: '%s' is not a valid archive"
-msgstr "оновленнÑ\8f Ñ\87аÑ\81Ñ\83 Ð·Ð¼Ñ\96ни: Ð\9dевÑ\96Ñ\80ний архів: \"%s\""
+msgstr "оновленнÑ\8f Ñ\87аÑ\81Ñ\83 Ð·Ð¼Ñ\96ни: Ð½ÐµÐºÐ¾Ñ\80екÑ\82ний архів: \"%s\""
 
 #: ar.c:157
 #, c-format
@@ -48,85 +48,85 @@ msgstr "оновлення часу зміни: Член \"%s\" не місти
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr ""
 "оновлення часу зміни: Функція ar_member_touch повернула\n"
-"поганий код відповіді для \"%s\""
+"помилковий код відповіді для \"%s\""
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr "lbr$set_module() не вдалося видобути дані модуля, стан = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "Помилка lbr$ini_control() з повідомленням стану = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "не вдалося відкрити бібліотеку «%s» для пошуку елемента «%s»"
+msgstr "не вдалося відкрити бібліотеку «%s» для пошуку стану елемента %d"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Елемент «%s»%s: %ld байтів з %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
 msgstr " (ім'я може бути обрізано)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Дата %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, режим = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "У рецепті забагато рядків (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Зупинка.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Елемент архіву, «%s», можливо є фіктивним; не вилучено"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Елемент архіву, «%s», можливо є фіктивним; не вилучено"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] Вилучаємо файл \"%s\""
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** Вилучаємо файл \"%s\""
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  спосіб, який слід застосувати"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (вбудоване):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (з \"%s\", рядок %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -134,62 +134,62 @@ msgstr ""
 "\n"
 "# Каталоги\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: неможливо отримати інформацію (stat).\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (ключ %s, час зміни %d): не вдалося відкрити.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (пристрій %d, івузол [%d,%d,%d]): неможливо відкрити.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (пристрій %ld, івузол %ld): не вдалося відкрити.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (ключ %s, час модифікації %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (пристрій %d, івузол [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (пристрій %ld, івузол %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Ні"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " файлів, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "ні"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " недосяжних цілей"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " на поточний момент."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " недосяжних цілей у %lu каталогах.\n"
@@ -199,158 +199,158 @@ msgstr " недосяжних цілей у %lu каталогах.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Рекурсивна змінна \"%s\" посилається сама на себе (у результаті)"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "незавершена посилання на змінну"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Спосіб для файла «%s» було задано %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr ""
 "Спосіб для файла «%s» було знайдено за допомогою пошуку неявних правил,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "але \"%s\" і \"%s\" тепер вважаються одним і тим же ж файлом. "
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr "Спосіб для «%s» буде проігноровано на користь способу для «%s»."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr ""
 "неможливо перейменувати \"%s\" з однією двокрапкою у \"%s\" з двома "
 "двокрапками"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr ""
 "неможливо перейменувати \"%s\" з двома двокрапками у \"%s\" з однією "
 "двокрапкою"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** Вилучаємо проміжний файл «%s»"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
-msgstr "Ð\92идалÑ\8fÑ\8e проміжні файли...\n"
+msgstr "Ð\92илÑ\83Ñ\87аÑ\94мо проміжні файли...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Поточний час"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: часова позначка поза допустимим діапазоном; замінюємо на %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Не є метою:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Вартісний файл (залежність .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Псевдоціль (залежність .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Мета, що викликається з командного рядка."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Типово, MAKEFILES, або -include/sinclude makefile."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "#  Вбудоване правило"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Пошук неявних правил виконано."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Пошук неявних правил не було виконано."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Основа неявного або статичного шаблону: \"%s\"\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Файл є проміжною залежністю."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Збирає також:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Час зміни ніколи не перевірявся."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Файл не існує."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Файл дуже старий."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Востаннє оновлено %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Файл був оновлений."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Файл не було оновлено."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Виконується обробка (ЦЕ ПОМИЛКА)"
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Ці залежності вже обробляються (ЦЕ ПОМИЛКА)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Успішно оновлено."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Повинно бути оновлено (встановлений ключ -q)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Спроба оновлення безуспішна."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Некоректне значення члена \"command_state\"!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -358,7 +358,7 @@ msgstr ""
 "\n"
 "# Файли"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -368,105 +368,122 @@ msgstr ""
 "# статистика щодо таблиці хешів файлів:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: поле «%s» не кешовано: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "не числовий перший аргумент для функції \"word\""
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "першим аргументом функції «word» має бути число, більше за 0"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "не числовий перший аргумент для функції \"wordlist\""
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "не числовий другий аргумент для функції \"wordlist\""
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe: помилка DuplicateHandle(In) (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe: помилка DuplicateHandle(Err) (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "Помилка CreatePipe() (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): помилка process_init_fd()\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Спорожнюємо тимчасовий пакетний файл %s\n"
 
-#: function.c:2193
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "file: не вказано назви файла"
+
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "open: %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "write: %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr "Некоректна дія над файлом: %s"
+msgid "close: %s: %s"
+msgstr "close: %s: %s"
+
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "file: надто багато аргументів"
 
-#: function.c:2324
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr "read: %s: %s"
+
+#: function.c:2275
+#, c-format
+msgid "file: invalid file operation: %s"
+msgstr "file: некоректна дія над файлом: %s"
+
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "недостатня кількість аргументів (%d) функції «%s»"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "не реалізовано на цій платформі: функція «%s»"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "незавершений виклик функції \"%s\"; пропущено \"%c\""
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "Порожня назва функції\n"
+msgstr "Порожня назва функції"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "Некоректна назва функції: %s\n"
+msgstr "Некоректна назва функції: %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "Назва функції є задовгою: %s\n"
+msgstr "Назва функції є задовгою: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "Некоректна мінімальна кількість аргументів (%d) функції %s\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "Некоректна мінімальна кількість аргументів (%d) функції %s"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "Некоректна максимальна кількість аргументів (%d) функції %s\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "Некоректна максимальна кількість аргументів (%d) функції %s"
 
 #: getopt.c:659
 #, c-format
@@ -563,7 +580,7 @@ msgstr "Пошук неявного правила для \"%s\".\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Пошук неявного правила для члена архіву \"%s\".\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Запобігання рекурсивного виклику неявного правила.\n"
 
@@ -607,101 +624,77 @@ msgstr "Виявлено залежність «%s» у форматі VPATH «%
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Пошук правила з проміжним файлом \"%s\".\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Не вдалося створити тимчасовий файл\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (зроблений дамп пам'яті)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (ігнорується)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<вбудований>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: спроба виконання рецепта для мети «%s» зазнала невдачі"
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "%s[%s] Помилка %d%s"
-
-#: job.c:519
+#: job.c:510
 #, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Помилка 0x%x%s"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] Помилка %d%s"
 
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** Очікування завершення завдань..."
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Незавершений дочірній процес %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (віддалений)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Підбираємо невдалий дочірній процес з PID %p %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Підбираємо вдалий дочірній процес з PID %p %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Знищення тимчасового командного файла %s\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr ""
 "Спроба витикання тимчасового файла пакетної обробки %s зазнала невдачі (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Вилучаємо PID дочірнього процесу %p %s%s з ланцюжка.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "спускаємо семафор сервера завдань: (Помилка %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Звільнено символ для дочірнього процесу %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "запис до сервера завдань"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() не вдалося запустити процес (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -710,100 +703,96 @@ msgstr ""
 "\n"
 "Під час невдалого запуску кількість аргументів дорівнювала %d\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Додаємо дочірній процес з PID %p (%s) %s%s до ланцюжка.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "очіккування семафора або дочірнього процесу: (помилка %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Отримано символ для дочірнього процесу %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "читаємо записи з потоку завдань"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: мети «%s» не існує"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: оновлення мети «%s» з такої причини: %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr ""
 "ця операційна система не дозволяє встановлювати обмеження на завантаження"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "неможливо встановити обмеження на завантаження: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "не вистачає файлових дескрипторів: не вдалося здублювати stdin\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "не вистачає файлових дескрипторів: не вдалося здублювати stdout\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr "не вистачає файлових дескрипторів: не вдалося здублювати stderr\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Не вдалося відновити stdin\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Не вдалося відновити stdout\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "Не вдалося відновити stderr\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr ""
 "make підібрано дочірній процес з pid %s, який все ще чекає на завершення "
 "процесу з pid %s\n"
 
-#: job.c:2458
+#: job.c:2275
+#, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: не знайдено команди\n"
+
+#: job.c:2277
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: Команда не знайдена"
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: не знайдено команди\n"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Командний процесор не знайдений"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: ймовірно, завершилося місце у середовищі"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL змінено (було «%s», тепер «%s»)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Створюємо тимчасовий пакетний файл %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -811,7 +800,7 @@ msgstr ""
 "Вміст файла пакетної обробки:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -820,7 +809,7 @@ msgstr ""
 "Вміст пакетного файла:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr ""
@@ -851,28 +840,28 @@ msgstr "Не вдалося завантажити символ %s з %s: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "Порожня назва символу для завантаження: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Завантажуємо символ %s з %s\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "На цій платформі виконання дії «load» не передбачено."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Ключі:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Ігнорується, для сумісності.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make           безумовно обробляти всі записи мети.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -881,18 +870,18 @@ msgstr ""
 "                              Перейти до каталогу до виконання будь-яких "
 "дій.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          Вивести діагностичні повідомлення.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
 "  --debug[=ПРАПОРЦІ]          Вивести діагностичні повідомлення вказаних "
 "типів.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -901,12 +890,12 @@ msgstr ""
 "                              Змінні середовища мають вищий пріоритет за "
 "змінні makefile.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr "  --eval=РЯДОК                Обробити РЯДОК як інструкцію makefile.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -914,16 +903,16 @@ msgstr ""
 "  -f ФАЙЛ, --file=ФАЙЛ, --makefile=ФАЙЛ\n"
 "                              Використати ФАЙЛ як makefile.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Вивести це повідомлення і вийти.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr ""
 "  -i, --ignore-errors         Ігнорувати помилки від способів збирання.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -931,7 +920,7 @@ msgstr ""
 "  -I КАТАЛОГ, --include-dir=КАТАЛОГ\n"
 "                              Виконати пошук включених makefile у каталозі.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -939,14 +928,14 @@ msgstr ""
 "  -j [N], --jobs[=N]          Виконувати одночасно N завдань; якщо не "
 "вказано — необмежену кількість.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr ""
 "  -k, --keep-going            Продовжувати роботу, якщо збирання якоїсь мети "
 "неможливе.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -956,7 +945,7 @@ msgstr ""
 "                              Не запускати декількох завдань, якщо "
 "навантаження перевищує N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
@@ -964,7 +953,7 @@ msgstr ""
 "  -L, --check-symlink-times   Використовувати новіший час зміни з часів "
 "зміни посилання і мети.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -974,7 +963,7 @@ msgstr ""
 "                              Не застосовувати способів збирання, просто "
 "вивести назви способів.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -984,7 +973,7 @@ msgstr ""
 "                              Вважати ФАЙЛ дуже старим і не виконувати його "
 "повторного збирання.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -993,11 +982,11 @@ msgstr ""
 "                              синхронізувати виведені дані паралельних "
 "завдань за ТИПом.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       Вивести внутрішню базу даних make.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
@@ -1006,19 +995,19 @@ msgstr ""
 "способів;                               код завершення показує, чи все вже "
 "зроблено.\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr "  -r, --no-builtin-rules      Вимкнути вбудовані неявні правила.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr "  -R, --no-builtin-variables  Вимкнути вбудовані параметри змінних.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Не виводити способи збирання.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1026,26 +1015,26 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Вимкнути -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr ""
 "  -t, --touch                 Змінювати час доступу до мети замість її "
 "повторного збирання.\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                     Вивести дані щодо трасування.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr "  -v, --version               Вивести дані щодо версії make і вийти.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Виводити дані щодо поточного каталогу.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
@@ -1053,7 +1042,7 @@ msgstr ""
 "  --no-print-directory        Вимкнути -w, навіть якщо вмикання було "
 "виконано неявним чином.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1061,7 +1050,7 @@ msgstr ""
 "  -W ФАЙЛ, --what-if=ФАЙЛ, --new-file=ФАЙЛ, --assume-new=ФАЙЛ\n"
 "                              Вважати ФАЙЛ завжди новим.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
@@ -1069,26 +1058,26 @@ msgstr ""
 "  --warn-undefined-variables  Попереджати про посилання на невизначену "
 "змінну.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "порожній рядок не може бути назвою файла"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "невідома специфікація рівня діагностики, «%s»"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "невідомий тип синхронізації виведених даних, «%s»"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: сталося переривання або виключення (код = 0x%lx, адреса = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1103,184 +1092,139 @@ msgstr ""
 "Прапорці виключення = %lx\n"
 "Адреса виключення = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Порушення правил доступу: дія з запису за адресою 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Порушення правил доступу: дія з читання за адресою 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() встановлює default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr ""
 "Пошуком шляхів find_and_set_shell() встановлено значення default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s призупиняється на 30 секунд..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "виконано sleep(30). Продовжуємо.\n"
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
-"внутрішня помилка: не вдалося відкрити семафор сервера завдань «%s»: "
-"(помилка %ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Клієнт сервера завдань (семафор %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "внутрішня помилка: некоректний рядок --jobserver-fds, «%s»"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Клієнт сервера завдань (fd %d,%d)\n"
+"попередження: сервер завдань недоступний: використовуємо -j1. Додайте «+» до "
+"батьківського правила збирання."
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr ""
 "попередження: у вкладеному файлів збирання вказано -jN: вимикаємо режим "
 "сервера завдань."
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "дублюємо сервер завдань"
-
-#: main.c:1570
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr ""
-"попередження: сервер завдань недоступний: використовуємо -j1. Додайте «+» до "
-"батьківського правила збирання."
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Makefile зі стандартного джерела вхідних даних вказано двічі."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (тимчасовий файл)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (тимчасовий файл)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "На цій платформі паралельної обробки завдань (-j) не передбачено."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Повертаємося до режиму єдиного завдання (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Слоти сервера завдань обмежено значенням %d\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "створюємо семафор сервера завдань: (помилка %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "створюємо канал завдань"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "ініціалізуємо канал сервера завдань"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Підтримки символічних посилань не передбачено: вимикаємо -L."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "Оновлення make-файлів...\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "Make-файл \"%s\", можливо, зациклений, він не перезбиратиметься.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Спроба перезібрати make-файл \"%s\" безуспішна."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Make-файл \"%s\", який включається, не було знайдено."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Make-файл \"%s\" не було знайдено"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Неможливо перейти у первісний каталог."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Повторне виконання[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (тимчасовий файл): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL містить декілька записів мети"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Не задані цілі і не знайдений make-файл"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Нема цілей"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "Оновлення цілей мети...\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "попередження: виявлено відхилення показів годинника. Збирання може бути "
 "неповним."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "Використання: %s [КЛЮЧІ]... [ЦІЛЬ]...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1289,7 +1233,7 @@ msgstr ""
 "\n"
 "Цю програму зібрано для %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1298,32 +1242,32 @@ msgstr ""
 "\n"
 "Цю програму зібрано для %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "Повідомлюйте про помилки до <bug-make@gnu.org>\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "разом з «%s%s» мало бути вказано непорожній рядковий аргумент"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "ключ \"-%c\" повинен використовуватися з цілим додатним аргументом"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
 msgstr "%sЗібрано для %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
 msgstr "%sЗібрано для %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1338,7 +1282,7 @@ msgstr ""
 "%sВам не надається ЖОДНИХ ГАРАНТІЙ, окрім гарантій передбачених "
 "законодавством.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1347,7 +1291,7 @@ msgstr ""
 "\n"
 "# База даних Make, надрукована %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1356,29 +1300,29 @@ msgstr ""
 "\n"
 "# Друк бази даних Make завершено %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "Невідома помилка %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: користувач %lu (насправді %lu), група %lu (насправді %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Ініціалізований доступ"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Доступ користувача"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Доступ make"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Доступ дочірнього процесу"
 
@@ -1423,9 +1367,8 @@ msgid "%s[%u]: Leaving directory '%s'\n"
 msgstr "%s[%u]: Залишаю каталог \"%s\"\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "помилка запису: %s"
+msgstr "помилка запису: stdout"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1441,225 +1384,260 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "створюємо канал завдань"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "дублюємо канал завдань"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "ініціалізуємо канал сервера завдань"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "внутрішня помилка: некоректний рядок --jobserver-auth, «%s»"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Клієнт сервера завдань (fd %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "канал сервера завдань"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "запис до сервера завдань"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "виконання pselect для каналу завдань"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "читання записів з потоку завдань"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "Читання make-файлів...\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "Читання make-файла \"%s\""
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (немає типової мети)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (шлях пошуку)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (не зважати)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (не розширювати ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "Пропускаємо мітку UTF-8 у файлі makefile «%s»\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
 msgstr "Пропускаємо мітку UTF-8 у буфері файла makefile\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "невірний синтаксис у умовному вираженні"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: не вдалося завантажити"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "визначення способу збирання розпочинається до визначення першої мети"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "пропущено правило до способу"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (ви хотіли ввести TAB замість 8 пробілів?)"
+msgstr "пропущено роздільник (ви хотіли ввести TAB замість 8 пробілів?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "пÑ\80опÑ\83Ñ\89ений Ñ\80оздÑ\96лÑ\8eваÑ\87%s"
+msgstr "пÑ\80опÑ\83Ñ\89ено Ñ\80оздÑ\96лÑ\8eваÑ\87"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "пропущений шаблон цілі"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "не один шаблон цілі"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "шаблон цілі не містить \"%%\""
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "пропущена \"endif\""
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "порожнє ім'я змінної"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "зайвий текст після директиви «define»"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "пропущена \"endif\", незавершена \"define\""
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "зайвий текст після директиви «endef»"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "зайвий текст після директиви \"%s\""
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "зайва \"%s\""
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "в умовному виразі можлива лише одна директива `else'"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Помилкове форматування специфічного для мети визначення змінної"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "у способах збирання не можна вказувати залежностей"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "змішані неявні правила і правила зі статичними зразками"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "змішані неявні і звичайні правила"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "ціль \"%s\" не відповідає зразку цілей"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "цільовий файл \"%s\" має входження і з \":\", і з \"::\" "
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "ціль \"%s\" зазначено декілька разів у одному правилі"
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "попередження: замінюємо спосіб для мети «%s»"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "попередження: ігноруємо застарілий спосіб для мети «%s»"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "змішані неявні і звичайні правила"
+msgstr "*** змішані неявні і звичайні правила: застарілий синтаксис"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "попередження: зустрінутий символ NUL; ігнорується до кінця рядки"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Ціль \"%s\" не вимагає виконання команд."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
 msgstr "\"%s\" не вимагає оновлення."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Обрізаємо файл «%s».\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%sНема правила для створення цілі \"%s\", необхідної для \"%s\"%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sНема правила для створення цілі \"%s\"%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Обробка цільового файла \"%s\".\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Попередня спроба оновити файл \"%s\" завершилася безуспішно.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Файл \"%s\" вже було оброблено.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Все ще оновлюється файл \"%s\".\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Оновлення файла \"%s\" завершено.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Не виявлено файла з назвою «%s».\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1667,137 +1645,137 @@ msgstr ""
 "*** Попередження: файл .LOW_RESOLUTION_TIME «%s» має часову позначку високої "
 "точності"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Знайдено неявне правило для \"%s\".\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Не знайдено неявних правил для \"%s\".\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Використовуємо типовий спосіб для «%s».\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Циклічна залежність %s <- %s пропущена."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Завершено обробку попередніх залежностей файла мети «%s».\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Цілі, від яких залежить \"%s\", збираються.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Аварійний зупинка на цільовому файлі \"%s\".\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Ціль \"%s\" не була перезібрана через помилки."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Залежність «%s» визначено для мети «%s» лише порядком збирання.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Залежності «%s» мети «%s» не існує.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Залежність «%s» є новішою за мету «%s».\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Залежність «%s» є старішою за мету «%s».\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "Ціль \"%s\" оголошена з двома двокрапками і не має залежностей.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr "Немає способу збирання «%s», всі попередні залежності не змінено.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Збираємо «%s» через встановлення ключа always-make.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "Потреби у повторному збиранні мети «%s» немає"
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; використовуємо назву VPATH «%s»"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Необхідно перезібрати ціль \"%s\".\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  Ігноруємо назву VPATH «%s».\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Застосовуємо спосіб «%s».\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Спроба перезібрати цільовий файл \"%s\" безуспішна.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Цільовий файл \"%s\" успішно перезібраний.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Цільовий файл \"%s\" вимагає перезбирання з ключем -q.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Використання типових команд для «%s».\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Увага: Файл \"%s\" має майбутній час зміни"
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Увага: час зміни файла «%s» перебуває на %s с у майбутньому"
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "Елемент .LIBPATTERNS «%s» не є зразком"
@@ -1807,7 +1785,7 @@ msgstr "Елемент .LIBPATTERNS «%s» не є зразком"
 msgid "Customs won't export: %s\n"
 msgstr "Неекспортовні налаштування: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1815,7 +1793,7 @@ msgstr ""
 "\n"
 "# Неявні правила"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1823,7 +1801,7 @@ msgstr ""
 "\n"
 "# Неявних правил нема."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1832,11 +1810,11 @@ msgstr ""
 "\n"
 "# Неявних правил: %u, термінальних: %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr "."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "ПОМИЛКА: значення num_pattern_rules є помилковим!  %u != %u"
@@ -1997,7 +1975,7 @@ msgstr "Запит інформації"
 msgid "Floating point co-processor not available"
 msgstr "Допоміжний процесор для обчислень з рухомою комою недоступний"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -2006,7 +1984,7 @@ msgstr ""
 "\n"
 "%s немає буферів strcache\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2017,7 +1995,7 @@ msgstr ""
 "Буфери strcache %s: %lu (%lu) / рядків = %lu / сховище = %lu Б / сер = %lu "
 "Б\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
@@ -2025,19 +2003,19 @@ msgstr ""
 "Поточний буфер %s: розмір = %hu Б / використано = %hu Б / кількість = %hu / "
 "сер = %hu Б\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "Інше використане %s: загалом = %lu B / кількість = %lu / сер = %lu Б\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
 msgstr ""
 "Інше вільне %s: загалом = %lu Б / макс = %lu Б / мін = %lu Б / сер = %hu Б\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2046,7 +2024,7 @@ msgstr ""
 "\n"
 "Швидкодія strcache %s: циклів пошуку = %lu / відсоток знайденого = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2054,44 +2032,44 @@ msgstr ""
 "# статистика щодо таблиці хешів:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "автоматична"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "типовий"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "визначена у середовищі"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "файл make"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "заданий ключ -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "визначена у командному рядку"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "Директива «override»"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (з \"%s\", рядок %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# стан змінних у хеш-таблиці:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2099,7 +2077,7 @@ msgstr ""
 "\n"
 "# Змінні\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2107,7 +2085,7 @@ msgstr ""
 "\n"
 "# Специфічні для зразка значення змінних"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2115,7 +2093,7 @@ msgstr ""
 "\n"
 "# Немає специфічних для зразка значень змінних."
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2134,88 +2112,38 @@ msgstr "попередження: невизначена змінна \"%.*s\""
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() повернуто код помилки %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Попередження: порожнє переспрямування\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "внутрішня помилка: «%s» command_state"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr ""
 "-попередження, ймовірно, вам варто повторно увімкнути обробку CTRL-Y з DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "ВБУДОВАНИЙ [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "ВБУДОВАНИЙ CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "ВБУДОВАНИЙ CD %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Невідома вбудована команда \"%s\".\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
+#: vmsjobs.c:1228
 #, c-format
-msgid "Error, empty command\n"
-msgstr "Помилка, порожня команда\n"
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:674
-#, c-format
-msgid "Redirected input from %s\n"
-msgstr "Переспрямоване виведення з %s\n"
-
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Повідомлення про помилку переспрямовано до %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Дописати виведенні дані до %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Переспрямовуємо виведення до %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Дописати %.*s і спорожнити\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Замість заданого виконується %s\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Помилка породження процесу, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2223,11 +2151,11 @@ msgstr ""
 "\n"
 "# Шляхи пошуку VPATH\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# Не визначено шлях пошуку \"vpath\"."
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2236,7 +2164,7 @@ msgstr ""
 "\n"
 "# %u шляхи пошуку \"vpath\".\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2244,7 +2172,7 @@ msgstr ""
 "\n"
 "# Не визначено загальний шлях пошуку (змінна \"VPATH\")."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2254,6 +2182,85 @@ msgstr ""
 "# Загальний шлях пошуку (змінна \"VPATH\"):\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Слоти сервера завдань обмежено значенням %d\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "створюємо семафор сервера завдань: (помилка %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"внутрішня помилка: не вдалося відкрити семафор сервера завдань «%s»: "
+"(помилка %ld: %s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Клієнт сервера завдань (семафор %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "спускаємо семафор сервера завдань: (Помилка %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "очіккування семафора або дочірнього процесу: (помилка %ld: %s)"
+
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s: спроба виконання рецепта для мети «%s» зазнала невдачі"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] Помилка 0x%x%s"
+
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
+#~ msgid "dup jobserver"
+#~ msgstr "дублюємо сервер завдань"
+
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Попередження: порожнє переспрямування\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "внутрішня помилка: «%s» command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "ВБУДОВАНИЙ [%s][%s]\n"
+
+#~ msgid "BUILTIN ECHO %s->%s\n"
+#~ msgstr "ВБУДОВАНЕ ECHO %s->%s\n"
+
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Невідома вбудована команда \"%s\".\n"
+
+#~ msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+#~ msgstr ""
+#~ "У .ONESHELL ця вбудована команда є невідомою або непідтримуваною: «%s»\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Помилка, порожня команда\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Переспрямоване виведення з %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Повідомлення про помилку переспрямовано до %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Переспрямовуємо виведення до %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Помилка породження процесу, %d\n"
+
 #~ msgid "internal error: multiple --sync-mutex options"
 #~ msgstr "внутрішня помилка: вказано декілька параметрів --sync-mutex"
 
index ee98bb2..6ad5df9 100644 (file)
Binary files a/po/vi.gmo and b/po/vi.gmo differ
index 6e64cf0..87fa1a3 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -1,28 +1,27 @@
 # Vietnamese translation for Make.
-# Copyright © 2013 Free Software Foundation, Inc.
+# Bản dịch tiếng Việt dành cho make.
+# Copyright © 2016 Free Software Foundation, Inc.
 # This file is distributed under the same license as the make package.
 # Clytie Siddall <clytie@riverland.net.au>, 2006-2010.
 # Nguyễn Thái Ngọc Duy <pclouds@gmail.com>, 2012.
-# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2013.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014, 2016.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: make-4.0\n"
+"Project-Id-Version: make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-10-10 07:36+0700\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-27 08:55+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
 "Language: vi\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Team-Website: <http://translationproject.org/team/vi.html>\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 1.5.5\n"
+"X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
+"X-Generator: Gtranslator 2.91.7\n"
 "X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-Language: Vietnamese\n"
-"X-Poedit-Country: VIET NAM\n"
 
 #: ar.c:46
 #, c-format
@@ -53,84 +52,84 @@ msgstr "touch: Thành viên “%s” không tồn tại trong “%s”"
 msgid "touch: Bad return code from ar_member_touch on '%s'"
 msgstr "touch: Gặp mã trả lại sai từ ar_member_touch trên “%s”"
 
-#: arscan.c:124
+#: arscan.c:130
 #, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
 msgstr ""
 "lbr$set_module() đã không giải nén thông tin về mô-đun, trạng thái = %d"
 
-#: arscan.c:230
+#: arscan.c:236
 #, c-format
 msgid "lbr$ini_control() failed with status = %d"
 msgstr "lbr$ini_control() bị lỗi với trạng thái = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "không thể mở thư viện “%s” để tra tìm thành viên “%s”"
+msgstr "không thể mở thư viện “%s” để tra tìm thành viên “%d”"
 
-#: arscan.c:944
+#: arscan.c:965
 #, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
 msgstr "Thành viên “%s”%s: %ld byte tại %ld (%ld).\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
-msgstr " (có lẽ tên bị cắt ngắn)"
+msgstr " (có lẽ tên đã bị cắt ngắn)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  Ngày %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d, gid = %d, chế độ = 0%o.\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
 msgstr "Công thức có quá nhiều dòng (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** Ngắt.\n"
 
-#: commands.c:629
+#: commands.c:627
 #, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] Thành phần kho “%s” có thể là giả; chưa bị xóa bỏ"
 
-#: commands.c:633
+#: commands.c:631
 #, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** Thành viên kho “%s” có thể là giả; chưa bị xóa bỏ"
 
-#: commands.c:647
+#: commands.c:645
 #, c-format
 msgid "*** [%s] Deleting file '%s'"
-msgstr "*** [%s] Đang x tập tin “%s”"
+msgstr "*** [%s] Đang xóa tập tin “%s”"
 
-#: commands.c:649
+#: commands.c:647
 #, c-format
 msgid "*** Deleting file '%s'"
-msgstr "*** Đang x tập tin “%s”"
+msgstr "*** Đang xóa tập tin “%s”"
 
-#: commands.c:685
+#: commands.c:683
 msgid "#  recipe to execute"
 msgstr "#  công thức cần thực hiện"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (dựng-sẵn):"
 
-#: commands.c:690
+#: commands.c:688
 #, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (từ “%s”, dòng %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -138,62 +137,62 @@ msgstr ""
 "\n"
 "# Thư mục\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s: không thể lấy thống kê.\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
-msgstr "# %s (kh %s, mtime %d): không thể mở.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
+msgstr "# %s (khóa %s, mtime %d): không thể mở.\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (thiết bị %d, nút thông tin [%d,%d,%d]): không thể mở.\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (thiết bị %ld, nút thông tin %ld): không thể mở.\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
-msgstr "# %s (kh %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
+msgstr "# %s (khóa %s, mtime %d): "
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (thiết bị %d, inode [%d,%d,%d]): "
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (thiết bị %ld, inode %ld): "
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "Không"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " tập tin, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "không"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " việc không thể làm được"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " cho đến giờ."
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " việc không thể làm được trong %lu thư mục.\n"
@@ -203,154 +202,154 @@ msgstr " việc không thể làm được trong %lu thư mục.\n"
 msgid "Recursive variable '%s' references itself (eventually)"
 msgstr "Biến đệ quy “%s” (cuối cùng) lại tham chiếu đến chính nó"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "tham chiếu biến chưa chấm dứt"
 
-#: file.c:271
+#: file.c:278
 #, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
 msgstr "Công thức được chỉ định cho tập tin “%s” tại %s:%lu,"
 
-#: file.c:276
+#: file.c:283
 #, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
 msgstr "Tìm thấy công thức cho tập tin “%s” nhờ quy tắc tìm kiếm ngầm,"
 
-#: file.c:280
+#: file.c:287
 #, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "nhưng “%s” bây giờ được cũng được xem là cùng tập tin “%s”."
 
-#: file.c:283
+#: file.c:290
 #, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
 msgstr ""
 "Công thức cho “%s” sẽ bị bỏ qua trong sự chấp thuận của một cái cho “%s”."
 
-#: file.c:303
+#: file.c:310
 #, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "không thể đổi tên “%s” hai chấm đơn thành “%s” hai chấm đôi"
 
-#: file.c:309
+#: file.c:316
 #, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "không thể đổi tên “%s” hai chấm đôi thành “%s” hai chấm đơn"
 
-#: file.c:401
+#: file.c:408
 #, c-format
 msgid "*** Deleting intermediate file '%s'"
-msgstr "*** Đang x tập tin trung gian “%s”"
+msgstr "*** Đang xóa tập tin trung gian “%s”"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
-msgstr "Xoá các tập tin trung gian...\n"
+msgstr "Xóa các tập tin trung gian…\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "Giờ hiện tại"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s: Thời gian của tập tin ở ngoài phạm vi nên thay thế bằng %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# Không phải là đích:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  Tập tin giá trị (điều kiện tiên quyết của .PRECIOUS)."
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  Đích giả (điều kiện tiên quyết của .PHONY)."
 
-#: file.c:964
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  Đích dòng lệnh."
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  Mặc định, MAKEFILES, hoặc makefile kiểu -include/sinclude."
 
-#: file.c:968
+#: file.c:975
 msgid "#  Builtin rule"
 msgstr "#  Quy tắc dựng sẵn"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  Hoàn tất tìm quy tắc ngầm."
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  Chưa hoàn tất tìm quy tắc ngầm."
 
-#: file.c:973
+#: file.c:980
 #, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  Cuống mẫu ngầm/tĩnh: “%s”\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  Tập tin là một điều kiện tiên quyết trung gian."
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
 msgstr "#  Cũng tạo:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  Chưa kiểm tra giờ sửa đổi."
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  Tập tin không tồn tại."
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  Tập tin rất cũ."
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  Lần sửa cuối cùng %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  Tập tin đã được cập nhật."
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  Tập tin chưa được cập nhật."
 
-#: file.c:1001
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
 msgstr "#  Công thức đang chạy (ĐÂY LÀ MỘT LỖI)."
 
-#: file.c:1004
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
 msgstr "#  Công thức phụ thuộc đang chạy (ĐÂY LÀ MỘT LỖI)."
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  Cập nhật thành công."
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  Cần được cập nhật (-q được đặt)."
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  Gặp lỗi khi cập nhật."
 
-#: file.c:1025
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
 msgstr "#  Gặp giá trị sai trong thành viên “command_state”!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -358,7 +357,7 @@ msgstr ""
 "\n"
 "# Tập tin"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -368,106 +367,124 @@ msgstr ""
 "# thống kê bảng băm tập tin:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
 msgstr "%s: Trường “%s” chưa được nhớ đệm: %s"
 
-#: function.c:780
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
 msgstr "đối số thứ nhất không phải dạng số cho hàm “word”"
 
-#: function.c:785
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "đối số thứ nhất cho hàm “word” phải lớn hơn 0"
 
-#: function.c:805
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
 msgstr "đối số thứ nhất không phải số cho hàm “wordlist”"
 
-#: function.c:807
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
 msgstr "đối số thứ hai không phải số cho hàm “wordlist”"
 
-#: function.c:1499
+#: function.c:1525
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(In) gặp lỗi (e=%ld)\n"
 
-#: function.c:1523
+#: function.c:1549
 #, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
 msgstr "windows32_openpipe: DuplicateHandle(Err) gặp lỗi (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() bị lỗi (e=%ld)\n"
 
-#: function.c:1538
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
 msgstr "windows32_openpipe(): process_init_fd() gặp lỗi\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "Dọn dẹp tập tin bó tạm %s\n"
 
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "file: thiết tên tập tin"
+
 # Variable: do not translate/ biến: đừng dịch
-#: function.c:2193
+#: function.c:2219 function.c:2250
 #, c-format
 msgid "open: %s: %s"
 msgstr "mở: %s: %s"
 
-#: function.c:2203
+#: function.c:2227
 #, c-format
 msgid "write: %s: %s"
 msgstr "ghi: %s: %s"
 
-#: function.c:2209
+# Variable: do not translate/ biến: đừng dịch
+#: function.c:2230 function.c:2267
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr "Thao tác tập tin không hợp lệ: %s"
+msgid "close: %s: %s"
+msgstr "đóng: %s: %s"
 
-#: function.c:2324
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "file: quá ít đối số"
+
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr "read: %s: %s"
+
+#: function.c:2275
+#, c-format
+msgid "file: invalid file operation: %s"
+msgstr "Tập tin: Thao tác tập tin không hợp lệ: %s"
+
+#: function.c:2390
 #, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
 msgstr "không đủ số đối số (%d) cho hàm “%s”"
 
-#: function.c:2336
+#: function.c:2402
 #, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "chưa được viết mã thi hành trên hệ thống này: hàm “%s”"
 
-#: function.c:2399
+#: function.c:2466
 #, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "cuộc gọi chưa được chấm dứt cho hàm “%s”: thiếu “%c”"
 
-#: function.c:2591
-#, fuzzy
+#: function.c:2650
 msgid "Empty function name"
-msgstr "Tên hàm trống rỗng\n"
+msgstr "Tên hàm trống rỗng"
 
-#: function.c:2593
-#, fuzzy, c-format
+#: function.c:2652
+#, c-format
 msgid "Invalid function name: %s"
-msgstr "Tên hàm không hợp lệ: %s\n"
+msgstr "Tên hàm không hợp lệ: %s"
 
-#: function.c:2595
-#, fuzzy, c-format
+#: function.c:2654
+#, c-format
 msgid "Function name too long: %s"
-msgstr "Tên hàm quá dài: %s\n"
+msgstr "Tên hàm quá dài: %s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "số lượng đối số tối thiểu (%d) là không hợp lệ cho hàm “%s”\n"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "Số lượng đối số tối thiểu (%d) là không hợp lệ cho hàm “%s”"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "số lượng đối số tối đa (%d) là không hợp lệ cho hàm “%s”\n"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "Số lượng đối số tối đa (%d) là không hợp lệ cho hàm “%s”"
 
 #: getopt.c:659
 #, c-format
@@ -564,7 +581,7 @@ msgstr "Tìm quy tắc ngầm cho “%s”.\n"
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "Tìm quy tắc ngầm về thành phần kho cho “%s”.\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "Tránh quy tắc ngầm đệ quy.\n"
 
@@ -608,101 +625,76 @@ msgstr "Tìm thấy điều kiện tiên quyết “%s” làm VPATH “%s”\n"
 msgid "Looking for a rule with intermediate file '%s'.\n"
 msgstr "Tìm quy tắc có tập tin trung gian “%s”.\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "Không thể tạo tập tin tạm\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (đổ lõi)"
 
-#: job.c:488
+#: job.c:490
 msgid " (ignored)"
 msgstr " (bỏ qua)"
 
-#: job.c:492 job.c:2046
+#: job.c:494 job.c:1828
 msgid "<builtin>"
 msgstr "<dựng-sẵn>"
 
-#: job.c:503
-#, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr "%s: công thức cho đích “%s” gặp lỗi"
-
-#: job.c:516 job.c:524
-#, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "%s[%s] Lỗi %d%s"
-
-#: job.c:519
+#: job.c:510
 #, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "%s[%s] Lỗi 0x%x%s"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s: %s] Lỗi %d%s"
 
-# Variable: don't translate / Biến: đừng dịch
-#: job.c:529
-#, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s[%s] %s%s%s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
-msgstr "*** Đang đợi những công việc chưa hoàn tất..."
+msgstr "*** Đang đợi những công việc chưa hoàn tất"
 
-#: job.c:651
+#: job.c:629
 #, c-format
 msgid "Live child %p (%s) PID %s %s\n"
 msgstr "Tiến trình con còn sống %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (máy chủ)"
 
-#: job.c:841
+#: job.c:831
 #, c-format
 msgid "Reaping losing child %p PID %s %s\n"
 msgstr "Đang mất tiến trình con %p PID %s %s\n"
 
-#: job.c:842
+#: job.c:832
 #, c-format
 msgid "Reaping winning child %p PID %s %s\n"
 msgstr "Đang thắng lại tiến trình con %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "Dọn dẹp tập tin bó tạm %s\n"
 
-#: job.c:855
+#: job.c:845
 #, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
 msgstr "Dọn dẹp tập tin bó tạm %s gặp lỗi (%d)\n"
 
-#: job.c:961
+#: job.c:951
 #, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
 msgstr "Bỏ tiến trình con %p PID %s%s khỏi xâu.\n"
 
-#: job.c:1021
-#, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr "giải phóng tín hiệu jobserver: (Lỗi %ld: %s)"
-
-#: job.c:1024 job.c:1038
+#: job.c:1006
 #, c-format
 msgid "Released token for child %p (%s).\n"
 msgstr "Đã giải phóng thẻ bài cho tiến trình con %p (%s).\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "ghi lại trình phục vụ công việc"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() gặp lỗi khi chạy tiến trình (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -711,100 +703,96 @@ msgstr ""
 "\n"
 "Đếm được %d đối số trong lần khởi chạy bị lỗi\n"
 
-#: job.c:1735
+#: job.c:1581
 #, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
 msgstr "Đặt tiến trình con %p (%s) PID %s%s vào xâu.\n"
 
-#: job.c:2005
-#, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr "chờ tín hiệu hay tiến trình con: (Lỗi %ld: %s)"
-
-#: job.c:2019
+#: job.c:1811
 #, c-format
 msgid "Obtained token for child %p (%s).\n"
 msgstr "Đã lấy thẻ bài cho điều con  %p (%s).\n"
 
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "đọc ống dẫn công việc"
-
-#: job.c:2056
+#: job.c:1838
 #, c-format
 msgid "%s: target '%s' does not exist"
 msgstr "%s: đích “%s” không tồn tại"
 
-#: job.c:2059
+#: job.c:1841
 #, c-format
 msgid "%s: update target '%s' due to: %s"
 msgstr "%s: cập nhật đích “%s”, cần bởi: %s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "không thể buộc giới hạn tải trên hệ điều hành này"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "không thể buộc giới hạn tải: "
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr ""
 "không thể xử lý thêm tập tin nào nữa: không thể nhân đôi đầu vào chuẩn\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr ""
 "không thể xử lý thêm tập tin nào nữa: không thể nhân đôi đầu ra chuẩn\n"
 
-#: job.c:2278
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
 msgstr ""
 "không thể xử lý thêm tập tin nào nữa: không thể nhân đôi đầu ra lỗi chuẩn\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "Không thể phục hồi đầu vào chuẩn\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "Không thể phục hồi đầu ra chuẩn\n"
 
-#: job.c:2309
+#: job.c:2105
 msgid "Could not restore stderr\n"
 msgstr "Không thể phục hồi đầu ra lỗi tiêu chuẩn\n"
 
-#: job.c:2420
+#: job.c:2234
 #, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
 msgstr "đặt điều con đã bắt là PID %s, vẫn còn đợi PID %s\n"
 
-#: job.c:2458
+#: job.c:2275
+#, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s: %s: Không tìm thấy lệnh\n"
+
+#: job.c:2277
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s: Không tìm thấy lệnh"
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]: %s: Không tìm thấy lệnh\n"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s: Không tìm thấy chương trình hệ vỏ"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: cạn không gian dành cho biến môi trường"
 
-#: job.c:2765
+#: job.c:2584
 #, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL thay đổi (trước là “%s”, giờ là “%s”)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "Tạo tập tin bó lệnh tạm: %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
@@ -812,7 +800,7 @@ msgstr ""
 "Nội dung tập tin bó lệnh:\n"
 "\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
@@ -821,7 +809,7 @@ msgstr ""
 "Nội dung tập tin bó lệnh:%s\n"
 "\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (dòng %d) Ngữ cảnh shell sai (!unixy && !batch_mode_shell)\n"
@@ -850,28 +838,28 @@ msgstr "Gặp lỗi khi tải ký hiệu %s từ %s: %s"
 msgid "Empty symbol name for load: %s"
 msgstr "Tên ký hiệu là trống rỗng cho việc tải: %s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
 msgstr "Đang tải ký hiệu %s từ %s\n"
 
-#: load.c:244
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
 msgstr "không hỗ trợ thao tác “load” trên hệ thống này."
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "Tùy chọn:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
 msgstr "  -b, -m                      Bỏ qua để tương thích.\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
 msgstr "  -B, --always-make           Tạo mọi đích vô điều kiện.\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
@@ -879,17 +867,17 @@ msgstr ""
 "  -C THƯ_MỤC, --directory=THƯ_MỤC\n"
 "                              Chuyển sang THƯ MỤC này trước khi làm.\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          In rất nhiều thông tin gỡ rối.\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
 msgstr ""
-"  --debug[=CỜ...]             In nhiều loại thông tin gỡ rối khác nhau.\n"
+"  --debug[=CỜ…]               In nhiều loại thông tin gỡ rối khác nhau.\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -897,13 +885,13 @@ msgstr ""
 "  -e, --environment-overrides\n"
 "                              Biến môi trường đè tập tin makefile.\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
 msgstr ""
 "  --eval=CHUỖI                Định lượng CHUỖI như một lệnh makefile.\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
@@ -911,15 +899,15 @@ msgstr ""
 "  -f TẬP-TIN, --file=TẬP-TIN, --makefile=TẬP-TIN\n"
 "                              Đọc TẬP-TIN dạng makefile.\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  Hiển thị trợ giúp này và thoát.\n"
 
-#: main.c:335
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
 msgstr "  -i, --ignore-errors         Bỏ qua lỗi từ công thức.\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
@@ -927,7 +915,7 @@ msgstr ""
 "  -I THƯ_MỤC, --include-dir=THƯ_MỤC\n"
 "                              Quét THƯ-MỤC này tìm makefile con.\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
@@ -935,12 +923,12 @@ msgstr ""
 "  -j [N], --jobs[=N]          Cho phép N công việc đồng thời; không có đối "
 "số thì vô hạn.\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
 msgstr "  -k, --keep-going            Cứ tiếp tục khi không thể tạo đích.\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -949,14 +937,14 @@ msgstr ""
 "  -l [SỐ], --load-average[=N], --max-load[=N]\n"
 "                              Chỉ chạy nhiều công việc nếu tải dưới N.\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
 msgstr ""
 "  -L, --check-symlink-times   Dùng mtime mới nhất giữa liên kết và đích.\n"
 
-#: main.c:349
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
@@ -965,7 +953,7 @@ msgstr ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Không chạy công thức; chỉ in chúng ra.\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
@@ -974,7 +962,7 @@ msgstr ""
 "  -o TẬP-TIN, --old-file=TẬP-TIN, --assume-old=TẬP-TIN\n"
 "                              Coi TẬP-TIN là rất cũ và không tạo lại.\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
@@ -983,30 +971,30 @@ msgstr ""
 "                              Đồng bộ hóa kết xuất công việc song song theo "
 "KIỂU.\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       In cơ sở dữ liệu nội bộ của make.\n"
 
-#: main.c:360
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
 msgstr ""
 "  -q, --question              Không chạy; mã thoát là \"đã cập nhật\".\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr "  -r, --no-builtin-rules      Tắt quy tắc ngầm dựng sẵn.\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr "  -R, --no-builtin-variables  Tắt đặt biến dựng sẵn.\n"
 
-#: main.c:366
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
 msgstr "  -s, --silent, --quiet       Không in lại công thức.\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1014,30 +1002,30 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              Tắt -k.\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
 msgstr "  -t, --touch                 Chạm đích thay vì tạo lại.\n"
 
-#: main.c:373
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
 msgstr "  --trace                     Hiển thị thông tin dấu vết.\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr "  -v, --version               Hiển thị phiên bản make rồi thoát.\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       Hiển thị thư mục hiện thời.\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
 msgstr "  --no-print-directory        Tắt -w, thậm chí nếu được bật ngầm.\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
@@ -1045,33 +1033,33 @@ msgstr ""
 "  -W TẬP-TIN, --what-if=TẬP-TIN, --new-file=TẬP-TIN, --assume-new=TẬP-TIN\n"
 "                              Giả định TẬP-TIN là mới vô hạn.\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
 msgstr ""
 "  --warn-undefined-variables  Cảnh báo tham chiếu đến biến chưa xác định.\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "chuỗi rỗng không hợp lệ làm tên tập tin"
 
-#: main.c:737
+#: main.c:766
 #, c-format
 msgid "unknown debug level specification '%s'"
 msgstr "không hiểu đặc tả cấp gỡ rối “%s”"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
 msgstr "không hiểu kiểu output-sync “%s”"
 
-#: main.c:828
+#: main.c:861
 #, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
 msgstr "%s: Bắt được ngắt/ngoại lệ (mã = 0x%lx, địa chỉ = 0x%p)\n"
 
-#: main.c:835
+#: main.c:868
 #, c-format
 msgid ""
 "\n"
@@ -1086,179 +1074,135 @@ msgstr ""
 "ExceptionFlags (các cờ ngoại lệ) = %lx\n"
 "ExceptionAddress (địa chỉ ngoại lệ) = 0x%p\n"
 
-#: main.c:843
+#: main.c:876
 #, c-format
 msgid "Access violation: write operation at address 0x%p\n"
 msgstr "Vi phạm truy cập: thao tác ghi tại địa chỉ 0x%p\n"
 
-#: main.c:844
+#: main.c:877
 #, c-format
 msgid "Access violation: read operation at address 0x%p\n"
 msgstr "Vi phạm truy cập: thao tác đọc tại địa chỉ 0x%p\n"
 
-#: main.c:920 main.c:935
+#: main.c:953 main.c:968
 #, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
 msgstr "find_and_set_shell() đang đặt default_shell = %s\n"
 
-#: main.c:988
+#: main.c:1021
 #, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
 msgstr "find_and_set_shell() đã quét đường dẫn thì đặt default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
-msgstr "%s đang ngưng trong 30 giây..."
+msgstr "%s đang ngưng trong 30 giây"
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "đã ngủ(30). Tiếp tục.\n"
 
-#: main.c:1527
-#, c-format
-msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-"lỗi nội tại: không thể mở cờ hiệu máy phục vụ công việc “%s”: (Lỗi %ld: %s)"
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr "Ứng dụng khách jobserver (cờ hiệu %s)\n"
-
-#: main.c:1534
-#, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "lỗi nội bộ: gặp chuỗi --jobserver-fds “%s” không hợp lệ"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr "Ứng dụng khách jobserver (fds %d,%d)\n"
-
-#: main.c:1551
-msgid "warning: -jN forced in submake: disabling jobserver mode."
-msgstr "cảnh báo: -jN bị ép buộc trong make con: tắt chế độ jobserver."
-
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "dup jobserver"
-
-#: main.c:1570
+#: main.c:1627
 msgid ""
 "warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
 msgstr ""
 "cảnh báo: trình jobserver không sẵn sàng: dùng -j1. Thêm “+” vào quy tắc "
 "make cha."
 
-#: main.c:1742
+#: main.c:1635
+msgid "warning: -jN forced in submake: disabling jobserver mode."
+msgstr "cảnh báo: -jN bị ép buộc trong make con: tắt chế độ jobserver."
+
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "Tập tin makefile từ đầu vào chuẩn được ghi hai lần."
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (tập tin tạm)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (tập tin tạm)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "Không hỗ trợ công việc song song (-j) trên hệ thống này."
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "Đặt lại thành chế độ công việc đơn (-j1)."
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr "Khe jobserver bị giới hạn thành %d\n"
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr "đang tạo tín hiệu jobserver: (Lỗi %ld: %s)"
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "tạo ống dẫn công việc"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "khởi tạo đường ống “jobserver”"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "Không hỗ trợ liên kết mềm: tắt -L."
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
-msgstr "Cập nhật makefile...\n"
+msgstr "Cập nhật makefile\n"
 
-#: main.c:2158
+#: main.c:2195
 #, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
 msgstr "Makefile “%s” bị lặp; không tạo lại nó.\n"
 
-#: main.c:2237
+#: main.c:2283
 #, c-format
 msgid "Failed to remake makefile '%s'."
 msgstr "Gặp lỗi khi làm lại makefile “%s”."
 
-#: main.c:2257
+#: main.c:2303
 #, c-format
 msgid "Included makefile '%s' was not found."
 msgstr "Không tìm thấy makefile bao gồm “%s”."
 
-#: main.c:2262
+#: main.c:2308
 #, c-format
 msgid "Makefile '%s' was not found"
 msgstr "Không tìm thấy makefile “%s”."
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "Không thể chuyển về thư mục gốc."
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "Thực hiện lại[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "unlink (bỏ liên kết tập tin tạm): "
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL chứa nhiều đích"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "Chưa chỉ định đích, và không tìm thấy makefile"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "Không có đích"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
-msgstr "Đang cập nhật đích mong muốn...\n"
+msgstr "Đang cập nhật đích mong muốn\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
 msgstr ""
 "cảnh báo: Phát hiện lệch giờ. Bản dịch của bạn có thể không hoàn thiện."
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
-msgstr "Cách dùng: %s [các_tùy_chọn] [đích] ...\n"
+msgstr "Cách dùng: %s [các_tùy_chọn] [đích] \n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1267,7 +1211,7 @@ msgstr ""
 "\n"
 "Chương trình này đã được dịch cho %s\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1276,34 +1220,34 @@ msgstr ""
 "\n"
 "Chương trình này đã được dịch cho %s (%s)\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr ""
 "Hãy thông báo lỗi cho <bug-make@gnu.org>\n"
 "Hãy thông báo lỗi dịch cho <http://translationproject.org/team/vi.html>.\n"
 
-#: main.c:2807
+#: main.c:2869
 #, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
 msgstr "tùy chọn “%s%s” cần một đối số là chuỗi khác rỗng"
 
-#: main.c:2871
+#: main.c:2933
 #, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "tùy chọn “-%c” cần một đối số số nguyên dương"
 
-#: main.c:3269
+#: main.c:3331
 #, c-format
 msgid "%sBuilt for %s\n"
-msgstr "%sĐược dịch cho %s\n"
+msgstr "%sĐược biên dịch cho %s\n"
 
-#: main.c:3271
+#: main.c:3333
 #, c-format
 msgid "%sBuilt for %s (%s)\n"
-msgstr "%sĐược dịch cho %s (%s)\n"
+msgstr "%sĐược biên dịch cho %s (%s)\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1316,7 +1260,7 @@ msgstr ""
 "%sĐây là phần mềm tự do: bạn có quyền sửa đổi và phát hành lại nó.\n"
 "%sKHÔNG CÓ BẢO HÀNH GÌ CẢ, với điều kiện được pháp luật cho phép.\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1325,7 +1269,7 @@ msgstr ""
 "\n"
 "# Cơ sở dữ liệu Make, in lúc %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1334,29 +1278,29 @@ msgstr ""
 "\n"
 "# Hoàn tất cơ sở dữ liệu Make lúc %s\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
-msgstr "Lỗi lạ %d"
+msgstr "Lỗi chưa biết %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: người dùng %lu (thật %lu), nhóm %lu (thật %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "Truy cập đã được khởi tạo"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "Truy cập người dùng"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Truy cập Make"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "Truy cập con"
 
@@ -1383,12 +1327,12 @@ msgstr "%s: Rời thư mục “%s”\n"
 #: output.c:115
 #, c-format
 msgid "%s[%u]: Entering an unknown directory\n"
-msgstr "%s[%u]: Vào thư mục lạ\n"
+msgstr "%s[%u]: Vào thư mục chưa biết\n"
 
 #: output.c:117
 #, c-format
 msgid "%s[%u]: Leaving an unknown directory\n"
-msgstr "%s[%u]: Rời thư mục lạ\n"
+msgstr "%s[%u]: Rời khỏi thư mục lạ\n"
 
 #: output.c:120
 #, c-format
@@ -1398,12 +1342,11 @@ msgstr "%s[%u]: Vào thư mục “%s”\n"
 #: output.c:122
 #, c-format
 msgid "%s[%u]: Leaving directory '%s'\n"
-msgstr "%s[%u]: Rời thư mục “%s”\n"
+msgstr "%s[%u]: Rời khỏi thư mục “%s”\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "lỗi ghi: %s"
+msgstr "lỗi ghi: đầu ra tiêu chuẩn"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1421,225 +1364,261 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "tạo ống dẫn công việc"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "nhân bản ống dẫn công việc"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "khởi tạo đường ống “jobserver”"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "lỗi nội bộ: gặp chuỗi --jobserver-auth “%s” không hợp lệ"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "Ứng dụng khách jobserver (fds %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "đường ống “jobserver”"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "ghi lại trình phục vụ công việc"
+
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "pselect (chọn tiến trình?) ống dẫn công việc"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "đọc ống dẫn công việc"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
-msgstr "Đang đọc makefile...\n"
+msgstr "Đang đọc makefile\n"
 
-#: read.c:335
+#: read.c:329
 #, c-format
 msgid "Reading makefile '%s'"
 msgstr "Đang đọc makefile “%s”"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (không có mục đích mặc định)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (đường dẫn tìm kiếm)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (không quan tâm)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (không nối thêm ~)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
 msgstr "Bỏ qua “UTF-8 BOM” trong makefile “%s”\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
-msgstr "Bỏ qua “UTF-8 BOM” trong bộ đệm makefile\n"
+msgstr "Bỏ qua “UTF-8 BOM” trong bộ đệm của tập tin makefile\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "cú pháp không hợp lệ trong biểu thức điều kiện"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
 msgstr "%s: gặp lỗi khi tải"
 
-#: read.c:992
+#: read.c:985
 msgid "recipe commences before first target"
 msgstr "công thức bắt đầu trước đích thứ nhất"
 
-#: read.c:1041
+#: read.c:1034
 msgid "missing rule before recipe"
 msgstr "thiếu quy tắc trước công thức"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (bạn đã định dùng TAB thay vì 8 khoảng trắng phải không?)"
+msgstr ""
+"thiếu dấu phân cách (bạn đã định dùng TAB thay vì 8 khoảng trắng phải không?)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
-msgstr "thiếu dấu phân cách%s"
+msgstr "thiếu dấu phân cách"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "thiếu mẫu đích"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "nhiều mẫu đích"
 
-#: read.c:1276
+#: read.c:1268
 #, c-format
 msgid "target pattern contains no '%%'"
 msgstr "mẫu đích không chứa “%%”"
 
-#: read.c:1398
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "thiếu chỉ thị “endif”"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "tên biến rỗng"
 
-#: read.c:1471
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "gặp các ký tự thừa đằng sau chỉ thị “define”"
 
-#: read.c:1496
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "thiếu “endef”, chỉ thị “define” chưa hoàn thiện"
 
-#: read.c:1524
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "gặp các ký tự thừa đằng sau chỉ thị “endef”"
 
-#: read.c:1595
+#: read.c:1588
 #, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "gặp các ký tự thừa đằng sau chỉ thị “%s”"
 
-#: read.c:1596
+#: read.c:1589
 #, c-format
 msgid "extraneous '%s'"
 msgstr "gặp “%s” thừa"
 
-#: read.c:1624
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "chỉ cho phép một “else” cho mỗi biểu thức điều kiện"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "Định nghĩa biến đích riêng biệt bị hỏng"
 
-#: read.c:1957
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
 msgstr "không thể định nghĩa điều kiện tiên quyết cho công thức"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "trộn lẫn quy tắc ngầm và mẫu tĩnh"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "trộn quy tắc ngầm và thường"
 
-#: read.c:2091
+#: read.c:2085
 #, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "đích “%s” không tương ứng với mẫu đích"
 
-#: read.c:2106 read.c:2152
+#: read.c:2100 read.c:2146
 #, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "tập tin đích “%s” có cả hai mục nhập : và ::"
 
-#: read.c:2112
+#: read.c:2106
 #, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "đích “%s” có nhiều hơn một trong cùng một quy tắc"
 
-#: read.c:2122
+#: read.c:2116
 #, c-format
 msgid "warning: overriding recipe for target '%s'"
 msgstr "cảnh báo: đè công thức cho đích “%s”"
 
-#: read.c:2125
+#: read.c:2119
 #, c-format
 msgid "warning: ignoring old recipe for target '%s'"
 msgstr "cảnh báo: bỏ qua công thức cũ cho đích “%s”"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "trộn quy tắc ngầm và thường"
+msgstr "*** trộn quy tắc ngầm và thường: cú pháp này đã lạc hậu"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "cảnh báo: thấy ký tự NUL; bỏ qua phần còn lại của dòng"
 
-#: remake.c:230
+#: remake.c:225
 #, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "Không cần làm gì cho “%s”."
 
-#: remake.c:231
+#: remake.c:226
 #, c-format
 msgid "'%s' is up to date."
-msgstr "Đã cập nhật “%s”."
+msgstr "“%s” đã cập nhật rồi."
 
-#: remake.c:303
+#: remake.c:322
 #, c-format
 msgid "Pruning file '%s'.\n"
 msgstr "Xén bớt tập tin “%s”.\n"
 
-#: remake.c:390 remake.c:393
+#: remake.c:405
 #, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
 msgstr "%sKhông có quy tắc để tạo đích “%s”, cần bởi “%s”%s"
 
-#: remake.c:402 remake.c:405
+#: remake.c:415
 #, c-format
 msgid "%sNo rule to make target '%s'%s"
 msgstr "%sKhông có quy tắc để tạo đích “%s”%s"
 
-#: remake.c:426
+#: remake.c:441
 #, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "Coi tập tin đích “%s”.\n"
 
-#: remake.c:433
+#: remake.c:448
 #, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "Vừa thử và thất bại khi cập nhật “%s”.\n"
 
-#: remake.c:445
+#: remake.c:460
 #, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "Coi tập tin “%s” là đã sẵn có rồi.\n"
 
-#: remake.c:455
+#: remake.c:470
 #, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "Vẫn đang cập nhật tập tin “%s”.\n"
 
-#: remake.c:458
+#: remake.c:473
 #, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "Hoàn tất cập nhật tập tin “%s”.\n"
 
-#: remake.c:487
+#: remake.c:502
 #, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "Tập tin “%s” không tồn tại.\n"
 
-#: remake.c:495
+#: remake.c:510
 #, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
@@ -1647,138 +1626,138 @@ msgstr ""
 "*** Cảnh báo: tập tin .LOW_RESOLUTION_TIME “%s” có nhãn thời gian độ phân "
 "giải cao"
 
-#: remake.c:508 remake.c:1040
+#: remake.c:523 remake.c:1055
 #, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "Tìm thấy quy tắc ngầm cho “%s”.\n"
 
-#: remake.c:510 remake.c:1042
+#: remake.c:525 remake.c:1057
 #, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "Không tìm thấy quy tắc ngầm cho “%s”.\n"
 
-#: remake.c:516
+#: remake.c:531
 #, c-format
 msgid "Using default recipe for '%s'.\n"
 msgstr "Dùng công thức mặc định cho “%s”.\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "Bỏ phụ thuộc vòng tròn %s <- %s."
 
-#: remake.c:675
+#: remake.c:690
 #, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "Hoàn tất điều kiện tiên quyết của tập tin đích “%s”.\n"
 
-#: remake.c:681
+#: remake.c:696
 #, c-format
 msgid "The prerequisites of '%s' are being made.\n"
 msgstr "Đang tạo điều kiện tiên quyết của “%s”.\n"
 
-#: remake.c:695
+#: remake.c:710
 #, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "Chịu thua tập tin đích “%s”.\n"
 
-#: remake.c:700
+#: remake.c:715
 #, c-format
 msgid "Target '%s' not remade because of errors."
 msgstr "Đích “%s” không được tạo lại do lỗi."
 
-#: remake.c:752
+#: remake.c:767
 #, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
 msgstr "Điều kiện tiên quyết “%s” là order-only (chỉ thứ tự) cho đích “%s”.\n"
 
-#: remake.c:757
+#: remake.c:772
 #, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "Điều kiện tiên quyết “%s” của đích “%s” không tồn tại.\n"
 
-#: remake.c:762
+#: remake.c:777
 #, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "Điều kiện tiên quyết “%s” là mới hơn đích “%s” .\n"
 
-#: remake.c:765
+#: remake.c:780
 #, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "Điều kiện tiên quyết “%s” cũ hơn đích “%s” .\n"
 
-#: remake.c:783
+#: remake.c:798
 #, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "Đích “%s” là hai chấm đôi và không có điều kiện tiên quyết.\n"
 
-#: remake.c:790
+#: remake.c:805
 #, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
 msgstr ""
 "Không có công thức cho “%s” và chưa thay đổi điều kiện tiên quyết nào.\n"
 
-#: remake.c:795
+#: remake.c:810
 #, c-format
 msgid "Making '%s' due to always-make flag.\n"
 msgstr "Tạo “%s” do cờ “always-make”.\n"
 
-#: remake.c:803
+#: remake.c:818
 #, c-format
 msgid "No need to remake target '%s'"
 msgstr "Không cần tạo lại đích “%s”."
 
-#: remake.c:805
+#: remake.c:820
 #, c-format
 msgid "; using VPATH name '%s'"
 msgstr "; dùng tên VPATH “%s”"
 
-#: remake.c:825
+#: remake.c:840
 #, c-format
 msgid "Must remake target '%s'.\n"
 msgstr "Phải tạo lại đích “%s”.\n"
 
-#: remake.c:831
+#: remake.c:846
 #, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
 msgstr "  Bỏ qua tên VPATH “%s”.\n"
 
-#: remake.c:840
+#: remake.c:855
 #, c-format
 msgid "Recipe of '%s' is being run.\n"
 msgstr "Đang chạy công thức của “%s”.\n"
 
-#: remake.c:847
+#: remake.c:862
 #, c-format
 msgid "Failed to remake target file '%s'.\n"
 msgstr "Gặp lỗi khi tạo lại được tập tin đích “%s”.\n"
 
-#: remake.c:850
+#: remake.c:865
 #, c-format
 msgid "Successfully remade target file '%s'.\n"
 msgstr "Tạo lại thành công tập tin đích “%s”.\n"
 
-#: remake.c:853
+#: remake.c:868
 #, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
 msgstr "Tập tin đích “%s” cần được tạo lại dưới tùy chọn “-q”.\n"
 
-#: remake.c:1048
+#: remake.c:1063
 #, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "Dùng lệnh mặc định cho “%s”.\n"
 
-#: remake.c:1397
+#: remake.c:1429
 #, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "Cảnh báo: Tập tin “%s” có giờ sửa đổi ở thì tương lai."
 
-#: remake.c:1411
+#: remake.c:1443
 #, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
 msgstr "Cảnh báo: Tập tin “%s” có giờ sửa đổi %s giây trong thì tương lai."
 
-#: remake.c:1610
+#: remake.c:1646
 #, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr "Phần tử .LIBPATTERNS “%s” không phải là một mẫu"
@@ -1788,7 +1767,7 @@ msgstr "Phần tử .LIBPATTERNS “%s” không phải là một mẫu"
 msgid "Customs won't export: %s\n"
 msgstr "Phần tùy chỉnh không xuất được: %s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1796,7 +1775,7 @@ msgstr ""
 "\n"
 "# Quy tắc ngầm"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1804,7 +1783,7 @@ msgstr ""
 "\n"
 "# Không có quy tắc ngầm."
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1813,11 +1792,11 @@ msgstr ""
 "\n"
 "# %u quy tắc ngầm, %u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " thiết bị cuối."
 
-#: rule.c:530
+#: rule.c:531
 #, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
 msgstr "LỖI: num_pattern_rules không đúng!  %u != %u"
@@ -1980,7 +1959,7 @@ msgstr "Yêu cầu thông tin"
 msgid "Floating point co-processor not available"
 msgstr "Không có bộ đồng xử lý số thực dấu chấm động"
 
-#: strcache.c:236
+#: strcache.c:274
 #, c-format
 msgid ""
 "\n"
@@ -1989,7 +1968,7 @@ msgstr ""
 "\n"
 "%s Không có bộ đệm strcache\n"
 
-#: strcache.c:266
+#: strcache.c:304
 #, c-format
 msgid ""
 "\n"
@@ -2000,7 +1979,7 @@ msgstr ""
 "%s bộ đệm strcache:  %lu (%lu) / chuỗi   = %lu / lưu     = %lu B / t.bình = "
 "%lu B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
@@ -2008,12 +1987,12 @@ msgstr ""
 "%s đệm hiện tại: kcỡ = %hu B / đã dùng = %hu B / slượng = %hu / tbình = %hu "
 "B\n"
 
-#: strcache.c:280
+#: strcache.c:319
 #, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
 msgstr "%s được dùng khác: tổng = %lu B / s.lượng = %lu / t.bình = %lu B\n"
 
-#: strcache.c:283
+#: strcache.c:322
 #, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
@@ -2021,7 +2000,7 @@ msgstr ""
 "%s trống khác:  tổng = %lu B / tđa = %lu B / t.thiểu = %lu B / t.bình = %hu "
 "B\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
@@ -2030,7 +2009,7 @@ msgstr ""
 "\n"
 "%s hiệu năng strcache:   tra cứu = %lu / tỷ lệ trúng = %lu%%\n"
 
-#: strcache.c:289
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
@@ -2038,44 +2017,44 @@ msgstr ""
 "# thống kê bảng băm tập tin:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "tự động"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "mặc định"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "môi trường"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "môi trường với -e"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "dòng lệnh"
 
-#: variable.c:1617
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "chỉ thị “override”"
 
-#: variable.c:1628
+#: variable.c:1658
 #, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (từ “%s”, dòng %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# thống kê bảng băm biến được đặt:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2083,7 +2062,7 @@ msgstr ""
 "\n"
 "# Biến\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2091,7 +2070,7 @@ msgstr ""
 "\n"
 "# Giá trị biến đặc tả cho mẫu"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2099,7 +2078,7 @@ msgstr ""
 "\n"
 "# Không có giá trị biến đặc tả cho mẫu"
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2118,87 +2097,37 @@ msgstr "cảnh báo: biến “%.*s” chưa được định nghĩa"
 msgid "sys$search() failed with %d\n"
 msgstr "sys$search() gặp lỗi với %d\n"
 
-#: vmsjobs.c:72
-#, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "Cảnh báo: Chuyển hướng trống rỗng\n"
-
-#: vmsjobs.c:183
-#, c-format
-msgid "internal error: '%s' command_state"
-msgstr "lỗi nội bộ: command_state “%s”"
-
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
 msgstr "-warning, có lẽ bạn cần phải bật lại xử lý CTRL-Y từ DCL.\n"
 
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "BUILTIN [%s][%s]\n"
-
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "BUILTIN CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "BUILTIN CD %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "Không hiểu lệnh dựng sẵn “%s”\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "Lỗi, lệnh trống rỗng\n"
-
-#: vmsjobs.c:674
+#: vmsjobs.c:1228
 #, c-format
-msgid "Redirected input from %s\n"
-msgstr "Đã chuyển hướng đầu vào từ %s\n"
+msgid "DCL: %s\n"
+msgstr "DCL: %s\n"
 
-#: vmsjobs.c:681
-#, c-format
-msgid "Redirected error to %s\n"
-msgstr "Đã chuyển hướng lỗi tới %s\n"
-
-#: vmsjobs.c:690
+#: vmsjobs.c:1288
 #, c-format
 msgid "Append output to %s\n"
 msgstr "Nối thêm đầu ra vào %s\n"
 
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "Đã chuyển hướng đầu ra tới %s\n"
-
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
 msgstr "Nối thêm %.*s và dọn dẹp\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "Thực hiện %s để thay thế\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "Gặp lỗi sản sinh tiến trình, %d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2206,11 +2135,11 @@ msgstr ""
 "\n"
 "# Đường dẫn tìm kiếm VPATH\n"
 
-#: vpath.c:600
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# Không có đường dẫn tìm kiếm “vpath”."
 
-#: vpath.c:602
+#: vpath.c:622
 #, c-format
 msgid ""
 "\n"
@@ -2219,7 +2148,7 @@ msgstr ""
 "\n"
 "# %u đường dẫn tìm kiếm “vpath”.\n"
 
-#: vpath.c:605
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2227,7 +2156,7 @@ msgstr ""
 "\n"
 "# Không có đường dẫn tìm kiếm chung (biến “VPATH”)."
 
-#: vpath.c:611
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2237,6 +2166,85 @@ msgstr ""
 "# Đường dẫn tìm kiếm chung (biến “VPATH”):\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "Khe jobserver bị giới hạn thành %d\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "đang tạo tín hiệu jobserver: (Lỗi %ld: %s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr ""
+"lỗi nội tại: không thể mở cờ hiệu máy phục vụ công việc “%s”: (Lỗi %ld: %s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "Ứng dụng khách jobserver (cờ hiệu %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "giải phóng tín hiệu jobserver: (Lỗi %ld: %s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "chờ tín hiệu hay tiến trình con: (Lỗi %ld: %s)"
+
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s: công thức cho đích “%s” gặp lỗi"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] Lỗi 0x%x%s"
+
+# Variable: don't translate / Biến: đừng dịch
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
+#~ msgid "dup jobserver"
+#~ msgstr "dup jobserver"
+
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "Cảnh báo: Chuyển hướng trống rỗng\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "lỗi nội bộ: command_state “%s”"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "BUILTIN [%s][%s]\n"
+
+#~ msgid "BUILTIN ECHO %s->%s\n"
+#~ msgstr "BUILTIN ECHO %s->%s\n"
+
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "Không hiểu lệnh dựng sẵn “%s”\n"
+
+#~ msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+#~ msgstr ""
+#~ "Lệnh dựng sẵn là chưa biết hoặc không được hỗ trợ trong .ONESHELL: “%s”\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "Lỗi, lệnh trống rỗng\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "Đã chuyển hướng đầu vào từ %s\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "Đã chuyển hướng lỗi tới %s\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "Đã chuyển hướng đầu ra tới %s\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "Gặp lỗi sản sinh tiến trình, %d\n"
+
 #~ msgid "internal error: multiple --sync-mutex options"
 #~ msgstr "lỗi nội bộ: có nhiều tùy chọn --sync-mutex"
 
@@ -2303,7 +2311,7 @@ msgstr ""
 #~ msgstr "chỉ thị “override” (đè) không hợp lệ"
 
 #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n"
-#~ msgstr " cảnh báo, CTRL-Y sẽ để một số tiến trình con còn lại.\n"
+#~ msgstr "* cảnh báo, CTRL-Y sẽ để một số tiến trình con còn lại.\n"
 
 #~ msgid "Do not specify -j or --jobs if sh.exe is not available."
 #~ msgstr "Đừng ghi rõ “-j” hay “--jobs” nếu <sh.exe> không sẵn sàng."
index 54b7430..9ebc0fe 100644 (file)
Binary files a/po/zh_CN.gmo and b/po/zh_CN.gmo differ
index 2282094..234bf71 100644 (file)
@@ -1,24 +1,27 @@
-# SOME DESCRIPTIVE TITLE.
+# Make in zh_CN.
 # Copyright (C) 2002 Free Software Foundation, Inc.
 # This file is distributed under the same license as the make package.
 # Wang Li <charles@linux.net.cn>, 2002.
 # LI Daobing <lidaobing@gmail.com>, 2008, 2013.
+# Mingye Wang <arthur200126@gmail.com>, 2015, 2016.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: make 3.99.90\n"
+"Project-Id-Version: make 4.1.90\n"
 "Report-Msgid-Bugs-To: bug-make@gnu.org\n"
-"POT-Creation-Date: 2014-10-05 12:25-0400\n"
-"PO-Revision-Date: 2013-06-12 15:54+0800\n"
-"Last-Translator: LI Daobing <lidaobing@gmail.com>\n"
+"POT-Creation-Date: 2016-05-22 09:27-0400\n"
+"PO-Revision-Date: 2016-04-25 13:32-0400\n"
+"Last-Translator: Mingye Wang (Arthur2e5) <arthur200126@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
 
 #: ar.c:46
-#, fuzzy, c-format
+#, c-format
 msgid "attempt to use unsupported feature: '%s'"
 msgstr "试图使用不支持的功能:“%s”"
 
@@ -27,103 +30,103 @@ msgid "touch archive member is not available on VMS"
 msgstr "VMS 系统上不支持 touch 归档成员"
 
 #: ar.c:147
-#, fuzzy, c-format
+#, c-format
 msgid "touch: Archive '%s' does not exist"
 msgstr "touch:归档文件“%s”不存在"
 
 #: ar.c:150
-#, fuzzy, c-format
+#, c-format
 msgid "touch: '%s' is not a valid archive"
 msgstr "touch:“%s”不是合法的归档文件"
 
 #: ar.c:157
-#, fuzzy, c-format
+#, c-format
 msgid "touch: Member '%s' does not exist in '%s'"
 msgstr "touch:在“%2$s”中不存在成员“%1$s”"
 
 #: ar.c:164
-#, fuzzy, c-format
+#, c-format
 msgid "touch: Bad return code from ar_member_touch on '%s'"
-msgstr "touch:来自“%s”上的 ar_member_touch 的错误返回码"
+msgstr "touch:“%s”上的 ar_member_touch 的返回码不当"
 
-#: arscan.c:124
-#, fuzzy, c-format
+#: arscan.c:130
+#, c-format
 msgid "lbr$set_module() failed to extract module info, status = %d"
-msgstr "lbr$set_modules 获取模块信息失败,返回状态 = %d"
+msgstr "lbr$set_modules() 获取模块信息失败,返回状态 = %d"
 
-#: arscan.c:230
-#, fuzzy, c-format
+#: arscan.c:236
+#, c-format
 msgid "lbr$ini_control() failed with status = %d"
-msgstr "lbr$ini_control 失败,返回状态 = %d"
+msgstr "lbr$ini_control() 失败,返回状态 = %d"
 
-#: arscan.c:255
-#, fuzzy, c-format
+#: arscan.c:261
+#, c-format
 msgid "unable to open library '%s' to lookup member status %d"
-msgstr "无法打开库“%s”以寻找成员“%s”"
+msgstr "无法打开库“%s”以寻找成员,状态 %d"
 
-#: arscan.c:944
-#, fuzzy, c-format
+#: arscan.c:965
+#, c-format
 msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n"
-msgstr "成员“%s”%s: %ld 字节 %ld (%ld)。\n"
+msgstr "成员“%s”%s: %ld 字节 %ld (%ld)。\n"
 
-#: arscan.c:945
+#: arscan.c:966
 msgid " (name might be truncated)"
-msgstr " (名称可能被截ç\9f­)"
+msgstr " (名称可能被截æ\96­)"
 
-#: arscan.c:947
+#: arscan.c:968
 #, c-format
 msgid "  Date %s"
 msgstr "  日期 %s"
 
-#: arscan.c:948
+#: arscan.c:969
 #, c-format
 msgid "  uid = %d, gid = %d, mode = 0%o.\n"
 msgstr "  uid = %d,gid = %d,mode = 0%o。\n"
 
-#: commands.c:404
+#: commands.c:402
 #, c-format
 msgid "Recipe has too many lines (%ud)"
-msgstr ""
+msgstr "命令配方行数太多 (%ud)"
 
-#: commands.c:505
+#: commands.c:503
 msgid "*** Break.\n"
 msgstr "*** 中断。\n"
 
-#: commands.c:629
-#, fuzzy, c-format
+#: commands.c:627
+#, c-format
 msgid "*** [%s] Archive member '%s' may be bogus; not deleted"
 msgstr "*** [%s] 归档成员“%s”可能是假的;未删除"
 
-#: commands.c:633
-#, fuzzy, c-format
+# 是化学的成分,是特技!
+#: commands.c:631
+#, c-format
 msgid "*** Archive member '%s' may be bogus; not deleted"
 msgstr "*** 归档成员“%s”可能是假的;未删除"
 
-#: commands.c:647
-#, fuzzy, c-format
+#: commands.c:645
+#, c-format
 msgid "*** [%s] Deleting file '%s'"
 msgstr "*** [%s] 正在删除文件“%s”"
 
-#: commands.c:649
-#, fuzzy, c-format
+#: commands.c:647
+#, c-format
 msgid "*** Deleting file '%s'"
 msgstr "*** 正在删除文件“%s”"
 
-#: commands.c:685
-#, fuzzy
+#: commands.c:683
 msgid "#  recipe to execute"
-msgstr "#  要执行的命令"
+msgstr "#  要执行的配方"
 
-#: commands.c:688
+#: commands.c:686
 msgid " (built-in):"
 msgstr " (内置):"
 
-#: commands.c:690
-#, fuzzy, c-format
+#: commands.c:688
+#, c-format
 msgid " (from '%s', line %lu):\n"
 msgstr " (从“%s”,行 %lu):\n"
 
-#: dir.c:989
+#: dir.c:1069
 msgid ""
 "\n"
 "# Directories\n"
@@ -131,225 +134,218 @@ msgstr ""
 "\n"
 "# 目录\n"
 
-#: dir.c:1001
+#: dir.c:1081
 #, c-format
 msgid "# %s: could not be stat'd.\n"
 msgstr "# %s:无法对其进行 stat 操作。\n"
 
-#: dir.c:1005
-#, c-format
-msgid "# %s (key %s, mtime %d): could not be opened.\n"
+#: dir.c:1085
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): could not be opened.\n"
 msgstr "# %s (关键字 %s,修改时间 %d):无法打开。\n"
 
-#: dir.c:1009
+#: dir.c:1090
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"
 msgstr "# %s (设备 %d,i-节点 [%d,%d,%d]):无法打开。\n"
 
-#: dir.c:1014
+#: dir.c:1095
 #, c-format
 msgid "# %s (device %ld, inode %ld): could not be opened.\n"
 msgstr "# %s (设备 %ld,i-节点 %ld):无法打开。\n"
 
-#: dir.c:1041
-#, c-format
-msgid "# %s (key %s, mtime %d): "
+#: dir.c:1122
+#, fuzzy, c-format
+msgid "# %s (key %s, mtime %ull): "
 msgstr "# %s (关键字 %s,修改时间 %d):"
 
-#: dir.c:1045
+#: dir.c:1127
 #, c-format
 msgid "# %s (device %d, inode [%d,%d,%d]): "
 msgstr "# %s (设备 %d,i-节点 [%d,%d,%d]):"
 
-#: dir.c:1050
+#: dir.c:1132
 #, c-format
 msgid "# %s (device %ld, inode %ld): "
 msgstr "# %s (设备 %ld,i-节点 %ld):"
 
-#: dir.c:1056 dir.c:1077
+#: dir.c:1138 dir.c:1159
 msgid "No"
 msgstr "无"
 
-#: dir.c:1059 dir.c:1080
+#: dir.c:1141 dir.c:1162
 msgid " files, "
 msgstr " 文件, "
 
-#: dir.c:1061 dir.c:1082
+#: dir.c:1143 dir.c:1164
 msgid "no"
 msgstr "无"
 
-#: dir.c:1064
+#: dir.c:1146
 msgid " impossibilities"
 msgstr " 不可能"
 
-#: dir.c:1068
+#: dir.c:1150
 msgid " so far."
 msgstr " 迄今为止。"
 
-#: dir.c:1085
+#: dir.c:1167
 #, c-format
 msgid " impossibilities in %lu directories.\n"
 msgstr " 不可能在 %lu 目录中。\n"
 
 #: expand.c:125
-#, fuzzy, c-format
+#, c-format
 msgid "Recursive variable '%s' references itself (eventually)"
-msgstr "递归变量“%s”应用自身 (最终)"
+msgstr "递归变量“%s”(最终将会)引用自身"
 
-#: expand.c:269
+#: expand.c:271
 msgid "unterminated variable reference"
 msgstr "未终止的变量引用"
 
-#: file.c:271
-#, fuzzy, c-format
+#: file.c:278
+#, c-format
 msgid "Recipe was specified for file '%s' at %s:%lu,"
-msgstr "关于文件“%s”的命令在 %s:%lu 处指定,"
+msgstr "关于文件“%s”的命令配方在 %s:%lu 处指定,"
 
-#: file.c:276
-#, fuzzy, c-format
+#: file.c:283
+#, c-format
 msgid "Recipe for file '%s' was found by implicit rule search,"
-msgstr "关于文件“%s”的命令通过隐含规则搜索而找到,"
+msgstr "å\85³äº\8eæ\96\87件â\80\9c%sâ\80\9dç\9a\84å\91½ä»¤é\85\8dæ\96¹é\80\9aè¿\87é\9a\90å\90«è§\84å\88\99æ\90\9cç´¢è\80\8cæ\89¾å\88°ï¼\8c"
 
-#: file.c:280
-#, fuzzy, c-format
+#: file.c:287
+#, c-format
 msgid "but '%s' is now considered the same file as '%s'."
 msgstr "但“%s”现在被看做“%s”的同一个文件。"
 
-#: file.c:283
-#, fuzzy, c-format
+#: file.c:290
+#, c-format
 msgid "Recipe for '%s' will be ignored in favor of the one for '%s'."
-msgstr "“%2$s”更优先,“%1$s”的命令被忽略。"
+msgstr "“%s”的命令配方被忽略,转而使用“%s”的"
 
-#: file.c:303
-#, fuzzy, c-format
+#: file.c:310
+#, c-format
 msgid "can't rename single-colon '%s' to double-colon '%s'"
 msgstr "无法将单冒号“%s”重命名为双冒号“%s”"
 
-#: file.c:309
-#, fuzzy, c-format
+#: file.c:316
+#, c-format
 msgid "can't rename double-colon '%s' to single-colon '%s'"
 msgstr "无法将双冒号“%s”重命名为单冒号“%s”"
 
-#: file.c:401
-#, fuzzy, c-format
+#: file.c:408
+#, c-format
 msgid "*** Deleting intermediate file '%s'"
 msgstr "*** 正在删除中间文件“%s”"
 
-#: file.c:405
+#: file.c:412
 msgid "Removing intermediate files...\n"
 msgstr "正在删除中间文件...\n"
 
-#: file.c:811
+#: file.c:818
 msgid "Current time"
 msgstr "当前时间"
 
-#: file.c:815
+#: file.c:822
 #, c-format
 msgid "%s: Timestamp out of range; substituting %s"
 msgstr "%s:时间标记超出范围;正在替换 %s"
 
-#: file.c:955
+#: file.c:962
 msgid "# Not a target:"
 msgstr "# 不是一个目标:"
 
-#: file.c:960
+#: file.c:967
 msgid "#  Precious file (prerequisite of .PRECIOUS)."
 msgstr "#  重要文件 (.PRECIOUS的前提)。"
 
-#: file.c:962
+#: file.c:969
 msgid "#  Phony target (prerequisite of .PHONY)."
 msgstr "#  假目标 (.PHONY的前提)。"
 
-#: file.c:964
-#, fuzzy
+#: file.c:971
 msgid "#  Command line target."
 msgstr "#  命令行目标。"
 
-#: file.c:966
+#: file.c:973
 msgid "#  A default, MAKEFILES, or -include/sinclude makefile."
 msgstr "#  缺省的、MAKEFILES 指定的、-include/sinclude 包含的 makefile。"
 
-#: file.c:968
-#, fuzzy
+#: file.c:975
 msgid "#  Builtin rule"
-msgstr ""
-"\n"
-"# 没有隐含规则。"
+msgstr "#  内建规则"
 
-#: file.c:970
+#: file.c:977
 msgid "#  Implicit rule search has been done."
 msgstr "#  对隐含规则的搜索已完成。"
 
-#: file.c:971
+#: file.c:978
 msgid "#  Implicit rule search has not been done."
 msgstr "#  对隐含规则的搜索尚未完成。"
 
-#: file.c:973
-#, fuzzy, c-format
+#: file.c:980
+#, c-format
 msgid "#  Implicit/static pattern stem: '%s'\n"
 msgstr "#  隐含/静态模式主干:“%s”\n"
 
-#: file.c:975
+#: file.c:982
 msgid "#  File is an intermediate prerequisite."
 msgstr "#  文件是一个中间前提。"
 
-#: file.c:979
+#: file.c:986
 msgid "#  Also makes:"
-msgstr "#  è¿\98è¦\81å\88\9b建:"
+msgstr "#  è¿\98è¦\81å\88¶ä½\9c:"
 
-#: file.c:985
+#: file.c:992
 msgid "#  Modification time never checked."
 msgstr "#  从不检查修改时间。"
 
-#: file.c:987
+#: file.c:994
 msgid "#  File does not exist."
 msgstr "#  文件不存在。"
 
-#: file.c:989
+#: file.c:996
 msgid "#  File is very old."
 msgstr "#  文件非常陈旧。"
 
-#: file.c:994
+#: file.c:1001
 #, c-format
 msgid "#  Last modified %s\n"
 msgstr "#  最近更新 %s\n"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has been updated."
 msgstr "#  文件已经被更新。"
 
-#: file.c:997
+#: file.c:1004
 msgid "#  File has not been updated."
 msgstr "#  文件尚未被更新。"
 
-#: file.c:1001
-#, fuzzy
+#: file.c:1008
 msgid "#  Recipe currently running (THIS IS A BUG)."
-msgstr "#  正在运行的命令 (这是个错误)。"
+msgstr "#  正在运行的配方 (这是 BUG)。"
 
-#: file.c:1004
-#, fuzzy
+#: file.c:1011
 msgid "#  Dependencies recipe running (THIS IS A BUG)."
-msgstr "#  正在运行的依赖性命令 (这是个错误)。"
+msgstr "#  正在运行的依赖性配方 (这是 BUG)。"
 
-#: file.c:1013
+#: file.c:1020
 msgid "#  Successfully updated."
 msgstr "#  更新成功。"
 
-#: file.c:1017
+#: file.c:1024
 msgid "#  Needs to be updated (-q is set)."
 msgstr "#  需要更新 (用 -q 设定)。"
 
-#: file.c:1020
+#: file.c:1027
 msgid "#  Failed to be updated."
 msgstr "#  更新失败。"
 
-#: file.c:1025
-#, fuzzy
+#: file.c:1032
 msgid "#  Invalid value in 'command_state' member!"
-msgstr "#  “command_state”成员中无效的值!"
+msgstr "#  “command_state”成员中存在无效的值!"
 
-#: file.c:1044
+#: file.c:1051
 msgid ""
 "\n"
 "# Files"
@@ -357,7 +353,7 @@ msgstr ""
 "\n"
 "# 文件"
 
-#: file.c:1048
+#: file.c:1055
 msgid ""
 "\n"
 "# files hash-table stats:\n"
@@ -367,137 +363,151 @@ msgstr ""
 "# 文件杂凑表状态:\n"
 "# "
 
-#: file.c:1058
+#: file.c:1065
 #, c-format
 msgid "%s: Field '%s' not cached: %s"
-msgstr ""
+msgstr "%s:字段“%s”未被缓存:%s"
 
-#: function.c:780
-#, fuzzy
+#: function.c:790
 msgid "non-numeric first argument to 'word' function"
-msgstr "â\80\9cwordâ\80\9då\87½æ\95°ç\9a\84第ä¸\80个å\8f\82æ\95°ä¸\8dæ\98¯æ\95°å\80¼å\8f\82æ\95°"
+msgstr "â\80\9cwordâ\80\9då\87½æ\95°ç\9a\84第ä¸\80个å\8f\82æ\95°ä¸\8dæ\98¯æ\95°å­\97"
 
-#: function.c:785
-#, fuzzy
+#: function.c:795
 msgid "first argument to 'word' function must be greater than 0"
 msgstr "“word”函数的第一个参数必须大于 0"
 
-#: function.c:805
-#, fuzzy
+#: function.c:815
 msgid "non-numeric first argument to 'wordlist' function"
-msgstr "â\80\9cwordlistâ\80\9då\87½æ\95°ç\9a\84第ä¸\80个å\8f\82æ\95°ä¸\8dæ\98¯æ\95°å\80¼å\8f\82æ\95°"
+msgstr "â\80\9cwordlistâ\80\9då\87½æ\95°ç\9a\84第ä¸\80个å\8f\82æ\95°ä¸\8dæ\98¯æ\95°å­\97"
 
-#: function.c:807
-#, fuzzy
+#: function.c:817
 msgid "non-numeric second argument to 'wordlist' function"
-msgstr "â\80\9cwordlistâ\80\9då\87½æ\95°ç\9a\84第äº\8c个å\8f\82æ\95°ä¸\8dæ\98¯æ\95°å\80¼å\8f\82æ\95°"
+msgstr "â\80\9cwordlistâ\80\9då\87½æ\95°ç\9a\84第äº\8c个å\8f\82æ\95°ä¸\8dæ\98¯æ\95°å­\97"
 
-#: function.c:1499
-#, fuzzy, c-format
+# 程序员的函数名提示,还是不要动吧。
+#: function.c:1525
+#, c-format
 msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"
-msgstr "创建子进程:复制句柄(In)失败 (e=%ld)\n"
+msgstr "windows32_openpipe: DuplicateHandle(In) 失败 (e=%ld)\n"
 
-#: function.c:1523
-#, fuzzy, c-format
+#: function.c:1549
+#, c-format
 msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"
-msgstr "创建子进程:复制句柄(Err)失败 (e=%ld)\n"
+msgstr "windows32_openpipe: DuplicateHandle(Err) 失败 (e=%ld)\n"
 
-#: function.c:1530
+#: function.c:1556
 #, c-format
 msgid "CreatePipe() failed (e=%ld)\n"
 msgstr "CreatePipe() 失败 (e=%ld)\n"
 
-#: function.c:1538
-#, fuzzy
+#: function.c:1564
 msgid "windows32_openpipe(): process_init_fd() failed\n"
-msgstr "windows32_openpipe ():process_init_fd() 失败\n"
+msgstr "windows32_openpipe(): process_init_fd() 失败\n"
 
-#: function.c:1832
+#: function.c:1858
 #, c-format
 msgid "Cleaning up temporary batch file %s\n"
 msgstr "正在清除临时批处理文件 %s\n"
 
-#: function.c:2193
-#, fuzzy, c-format
+#: function.c:2215 function.c:2240
+msgid "file: missing filename"
+msgstr "file:缺少文件名"
+
+#: function.c:2219 function.c:2250
+#, c-format
 msgid "open: %s: %s"
-msgstr "%s: %s"
+msgstr "open: %s: %s"
 
-#: function.c:2203
-#, fuzzy, c-format
+#: function.c:2227
+#, c-format
 msgid "write: %s: %s"
-msgstr "写错误: %s"
+msgstr "write: %s: %s"
 
-#: function.c:2209
+#: function.c:2230 function.c:2267
 #, c-format
-msgid "Invalid file operation: %s"
-msgstr ""
+msgid "close: %s: %s"
+msgstr "close:%s:%s"
 
-#: function.c:2324
-#, fuzzy, c-format
+#: function.c:2243
+msgid "file: too many arguments"
+msgstr "file:太多参数"
+
+#: function.c:2262
+#, c-format
+msgid "read: %s: %s"
+msgstr "read:%s:%s"
+
+#: function.c:2275
+#, c-format
+msgid "file: invalid file operation: %s"
+msgstr "file:无效文件(file)操作:%s"
+
+#: function.c:2390
+#, c-format
 msgid "insufficient number of arguments (%d) to function '%s'"
-msgstr "函数“%2$s”的参数数量(%1$d)不够"
+msgstr "函数“%2$s”的参数数量 (%1$d) 不够"
 
-#: function.c:2336
-#, fuzzy, c-format
+#: function.c:2402
+#, c-format
 msgid "unimplemented on this platform: function '%s'"
 msgstr "在本平台上未实现:函数“%s”"
 
-#: function.c:2399
-#, fuzzy, c-format
+#: function.c:2466
+#, c-format
 msgid "unterminated call to function '%s': missing '%c'"
 msgstr "对函数“%s”的未终止的调用:遗漏“%c”"
 
-#: function.c:2591
+#: function.c:2650
 msgid "Empty function name"
-msgstr ""
+msgstr "空函数名"
 
-#: function.c:2593
+#: function.c:2652
 #, c-format
 msgid "Invalid function name: %s"
-msgstr ""
+msgstr "无效的函数名称:%s"
 
-#: function.c:2595
+#: function.c:2654
 #, c-format
 msgid "Function name too long: %s"
-msgstr ""
+msgstr "函数名称太长:%s"
 
-#: function.c:2598
+#: function.c:2657
 #, fuzzy, c-format
-msgid "Invalid minimum argument count (%d) for function %s"
-msgstr "函数“%2$s”的参数数量(%1$d)不够"
+msgid "Invalid minimum argument count (%u) for function %s"
+msgstr "函数“%2$s”的最少参数数量 (%1$d) 无效"
 
-#: function.c:2601
+#: function.c:2660
 #, fuzzy, c-format
-msgid "Invalid maximum argument count (%d) for function %s"
-msgstr "函数“%2$s”的参数数量(%1$d)不够"
+msgid "Invalid maximum argument count (%u) for function %s"
+msgstr "函数“%2$s”的最多参数数量 (%1$d) 无效"
 
 #: getopt.c:659
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s:选项“%s”含义不清\n"
 
 #: getopt.c:683
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '--%s' doesn't allow an argument\n"
-msgstr "%s:选项“--%s”不需要参数\n"
+msgstr "%s:选项“--%s”不允许参数\n"
 
 #: getopt.c:688
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '%c%s' doesn't allow an argument\n"
-msgstr "%s:选项“%c%s”不需要参数\n"
+msgstr "%s:选项“%c%s”不允许参数\n"
 
 #: getopt.c:705 getopt.c:878
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '%s' requires an argument\n"
 msgstr "%s:选项“%s”需要一个参数\n"
 
 #: getopt.c:734
-#, fuzzy, c-format
+#, c-format
 msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s:无法识别的选项“--%s”\n"
 
 #: getopt.c:738
-#, fuzzy, c-format
+#, c-format
 msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s:无法识别的选项“%c%s”\n"
 
@@ -517,29 +527,29 @@ msgid "%s: option requires an argument -- %c\n"
 msgstr "%s:选项需要一个参数 -- %c\n"
 
 #: getopt.c:844
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s:选项“-W %s”含义不清\n"
 
 #: getopt.c:862
-#, fuzzy, c-format
+#, c-format
 msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s:选项“-W %s”不允许给出参数\n"
 
 #: guile.c:58
 #, c-format
 msgid "guile: Expanding '%s'\n"
-msgstr ""
+msgstr "guile: 正拓展 '%s'\n"
 
 #: guile.c:74
 #, c-format
 msgid "guile: Evaluating '%s'\n"
-msgstr ""
+msgstr "guile: 正求值 '%s'\n"
 
 #: hash.c:49
-#, fuzzy, c-format
+#, c-format
 msgid "can't allocate %lu bytes for hash table: memory exhausted"
-msgstr "无法为杂凑表分配 %ld 字节: 内存耗尽"
+msgstr "无法为杂凑表分配 %lu 字节: 内存耗尽"
 
 #: hash.c:280
 #, c-format
@@ -557,155 +567,129 @@ msgid "Collisions=%ld/%ld=%.0f%%"
 msgstr "碰撞=%ld/%ld=%.0f%%"
 
 #: implicit.c:38
-#, fuzzy, c-format
+#, c-format
 msgid "Looking for an implicit rule for '%s'.\n"
 msgstr "正在为“%s”寻找隐含规则。\n"
 
 #: implicit.c:54
-#, fuzzy, c-format
+#, c-format
 msgid "Looking for archive-member implicit rule for '%s'.\n"
 msgstr "正在为“%s”寻找归档成员隐含规则。\n"
 
-#: implicit.c:310
+#: implicit.c:311
 msgid "Avoiding implicit rule recursion.\n"
 msgstr "避免隐含规则递归。\n"
 
 #: implicit.c:486
 #, c-format
 msgid "Stem too long: '%.*s'.\n"
-msgstr ""
+msgstr "主干太长:'%.*s'.\n"
 
 #: implicit.c:491
-#, fuzzy, c-format
+#, c-format
 msgid "Trying pattern rule with stem '%.*s'.\n"
-msgstr "主干“%.*s”尝试匹配模式规则。\n"
+msgstr "主干“%.*s”尝试匹配模式规则。\n"
 
 #: implicit.c:697
-#, fuzzy, c-format
+#, c-format
 msgid "Rejecting impossible rule prerequisite '%s'.\n"
 msgstr "拒绝不可能的规则前提“%s”。\n"
 
 #: implicit.c:698
-#, fuzzy, c-format
+#, c-format
 msgid "Rejecting impossible implicit prerequisite '%s'.\n"
 msgstr "拒绝不可能的隐含前提“%s”。\n"
 
 #: implicit.c:711
-#, fuzzy, c-format
+#, c-format
 msgid "Trying rule prerequisite '%s'.\n"
 msgstr "尝试规则前提“%s”。\n"
 
 #: implicit.c:712
-#, fuzzy, c-format
+#, c-format
 msgid "Trying implicit prerequisite '%s'.\n"
 msgstr "尝试隐含前提“%s”。\n"
 
 #: implicit.c:751
-#, fuzzy, c-format
+#, c-format
 msgid "Found prerequisite '%s' as VPATH '%s'\n"
-msgstr "前提“%s”在 VPATH “%s” 中发现\n"
+msgstr "前提“%s”在 VPATH“%s”中发现\n"
 
 #: implicit.c:765
-#, fuzzy, c-format
+#, c-format
 msgid "Looking for a rule with intermediate file '%s'.\n"
-msgstr "正在寻找使用中间文件“%s”的规则。\n"
+msgstr "正在寻找包含中间文件“%s”的规则。\n"
 
-#: job.c:361
+#: job.c:363
 msgid "Cannot create a temporary file\n"
 msgstr "无法创建临时文件\n"
 
-#: job.c:483
+#: job.c:485
 msgid " (core dumped)"
 msgstr " (core dumped)"
 
-#: job.c:488
-#, fuzzy
+#: job.c:490
 msgid " (ignored)"
-msgstr "[%s] 错误 %d (忽略)"
+msgstr " (已忽略)"
 
-#: job.c:492 job.c:2046
-#, fuzzy
+#: job.c:494 job.c:1828
 msgid "<builtin>"
-msgstr " (内置):"
+msgstr "<内置>"
 
-#: job.c:503
+#: job.c:510
 #, c-format
-msgid "%s: recipe for target '%s' failed"
-msgstr ""
-
-#: job.c:516 job.c:524
-#, fuzzy, c-format
-msgid "%s[%s] Error %d%s"
-msgstr "*** [%s] 错误 %d"
+msgid "%s[%s: %s] Error %d%s"
+msgstr "%s[%s:%s] 错误 %d%s"
 
-#: job.c:519
-#, fuzzy, c-format
-msgid "%s[%s] Error 0x%x%s"
-msgstr "*** [%s] 错误 0x%x"
-
-#: job.c:529
-#, fuzzy, c-format
-msgid "%s[%s] %s%s%s"
-msgstr "%s%s: %s"
-
-#: job.c:621
+#: job.c:599
 msgid "*** Waiting for unfinished jobs...."
 msgstr "*** 正在等待未完成的任务...."
 
-#: job.c:651
-#, fuzzy, c-format
+#: job.c:629
+#, c-format
 msgid "Live child %p (%s) PID %s %s\n"
-msgstr "活跃子进程 0x%08lx (%s) PID %ld %s\n"
+msgstr "活跃子进程 %p (%s) PID %s %s\n"
 
-#: job.c:653 job.c:843 job.c:962 job.c:1737
+#: job.c:631 job.c:833 job.c:952 job.c:1583
 msgid " (remote)"
 msgstr " (远程)"
 
-#: job.c:841
-#, fuzzy, c-format
+#: job.c:831
+#, c-format
 msgid "Reaping losing child %p PID %s %s\n"
-msgstr "正在中止失败的子进程 0x%08lx PID %ld %s\n"
+msgstr "正在中止失败的子进程 %p PID %s %s\n"
 
-#: job.c:842
-#, fuzzy, c-format
+#: job.c:832
+#, c-format
 msgid "Reaping winning child %p PID %s %s\n"
-msgstr "正在中止获胜的子进程 0x%08lx PID %ld %s\n"
+msgstr "正在中止获胜的子进程 %p PID %s %s\n"
 
-#: job.c:849
+#: job.c:839
 #, c-format
 msgid "Cleaning up temp batch file %s\n"
 msgstr "正在清除临时批文件 %s\n"
 
-#: job.c:855
-#, fuzzy, c-format
+#: job.c:845
+#, c-format
 msgid "Cleaning up temp batch file %s failed (%d)\n"
-msgstr "æ­£å\9c¨æ¸\85é\99¤ä¸´æ\97¶æ\89¹æ\96\87件 %s\n"
+msgstr "æ¸\85ç\90\86临æ\97¶æ\89¹å¤\84ç\90\86æ\96\87件 %s å¤±è´¥ (%d)\n"
 
-#: job.c:961
-#, fuzzy, c-format
+#: job.c:951
+#, c-format
 msgid "Removing child %p PID %s%s from chain.\n"
-msgstr "从链中删除子进程 0x%08lx PID %ld%s。\n"
+msgstr "从链中删除子进程 %p PID %s%s。\n"
 
-#: job.c:1021
+#: job.c:1006
 #, c-format
-msgid "release jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:1024 job.c:1038
-#, fuzzy, c-format
 msgid "Released token for child %p (%s).\n"
-msgstr "为子进程 0x%08lx (%s) 释放令牌(token)。\n"
+msgstr "为子进程 %p (%s) 释放令牌 (token)。\n"
 
-#: job.c:1036
-msgid "write jobserver"
-msgstr "写入任务服务器"
-
-#: job.c:1662 job.c:2387
+#: job.c:1508 job.c:2201
 #, c-format
 msgid "process_easy() failed to launch process (e=%ld)\n"
 msgstr "process_easy() 启动进程失败 (e=%ld)\n"
 
-#: job.c:1666 job.c:2391
+#: job.c:1512 job.c:2205
 #, c-format
 msgid ""
 "\n"
@@ -714,180 +698,175 @@ msgstr ""
 "\n"
 "失败执行中共有 %d 个参数。\n"
 
-#: job.c:1735
-#, fuzzy, c-format
+#: job.c:1581
+#, c-format
 msgid "Putting child %p (%s) PID %s%s on the chain.\n"
-msgstr "将子进程 0x%08lx (%s) PID %ld%s 放入链。\n"
+msgstr "将子进程 %p (%s) PID %s%s 放入链。\n"
 
-#: job.c:2005
+#: job.c:1811
 #, c-format
-msgid "semaphore or child process wait: (Error %ld: %s)"
-msgstr ""
-
-#: job.c:2019
-#, fuzzy, c-format
 msgid "Obtained token for child %p (%s).\n"
-msgstr "获得至进程 0x%08lx (%s) 的标记。\n"
-
-#: job.c:2029
-msgid "read jobs pipe"
-msgstr "读取任务管道"
+msgstr "获得至进程 %p (%s) 的标记。\n"
 
-#: job.c:2056
-#, fuzzy, c-format
+#: job.c:1838
+#, c-format
 msgid "%s: target '%s' does not exist"
-msgstr "touch:归档文件“%s”不存在"
+msgstr "%s: 目标文件“%s”不存在"
 
-#: job.c:2059
-#, fuzzy, c-format
+#: job.c:1841
+#, c-format
 msgid "%s: update target '%s' due to: %s"
-msgstr "%1$s没有规则可以创建“%3$s”%4$s需要的目标“%2$s”"
+msgstr "%s:更新“%s”,因为:%s"
 
-#: job.c:2171
+#: job.c:1956
 msgid "cannot enforce load limits on this operating system"
 msgstr "无法在本操作系统中实施负载限制"
 
-#: job.c:2173
+#: job.c:1958
 msgid "cannot enforce load limit: "
 msgstr "无法实施负载限制:"
 
-#: job.c:2252
+#: job.c:2048
 msgid "no more file handles: could not duplicate stdin\n"
 msgstr "没有剩余的文件句柄: 无法复制标准输入\n"
 
-#: job.c:2264
+#: job.c:2060
 msgid "no more file handles: could not duplicate stdout\n"
 msgstr "没有剩余的文件句柄: 无法复制标准输出\n"
 
-#: job.c:2278
-#, fuzzy
+#: job.c:2074
 msgid "no more file handles: could not duplicate stderr\n"
-msgstr "没有剩余的文件句柄: 无法复制标准输入\n"
+msgstr "没有剩余的文件句柄: 无法复制标准错误\n"
 
-#: job.c:2293
+#: job.c:2089
 msgid "Could not restore stdin\n"
 msgstr "无法还原标准输入\n"
 
-#: job.c:2301
+#: job.c:2097
 msgid "Could not restore stdout\n"
 msgstr "无法还原标准输出\n"
 
-#: job.c:2309
-#, fuzzy
+#: job.c:2105
 msgid "Could not restore stderr\n"
-msgstr "无法还原标准输入\n"
+msgstr "无法还原标准错误\n"
 
-#: job.c:2420
-#, fuzzy, c-format
+#: job.c:2234
+#, c-format
 msgid "make reaped child pid %s, still waiting for pid %s\n"
-msgstr "make 已中止的子进程 pid %ld,仍在等待 pid %ld\n"
+msgstr "make 已中止的子进程 pid %s,仍在等待 pid %s\n"
+
+#: job.c:2275
+#, c-format
+msgid "%s: %s: Command not found\n"
+msgstr "%s:%s:命令未找到\n"
 
-#: job.c:2458
+#: job.c:2277
 #, c-format
-msgid "%s: Command not found"
-msgstr "%s:命令未找到"
+msgid "%s[%u]: %s: Command not found\n"
+msgstr "%s[%u]:%s:命令未找到\n"
 
-#: job.c:2518
+#: job.c:2337
 #, c-format
 msgid "%s: Shell program not found"
 msgstr "%s:未找到 shell 程序"
 
-#: job.c:2527
+#: job.c:2346
 msgid "spawnvpe: environment space might be exhausted"
 msgstr "spawnvpe: 环境变量空间可能会耗尽"
 
-#: job.c:2765
-#, fuzzy, c-format
+#: job.c:2584
+#, c-format
 msgid "$SHELL changed (was '%s', now '%s')\n"
 msgstr "$SHELL 已改变 (原为“%s”,现为“%s”)\n"
 
-#: job.c:3198 job.c:3383
+#: job.c:3022 job.c:3207
 #, c-format
 msgid "Creating temporary batch file %s\n"
 msgstr "正在创建临时批文件 %s\n"
 
-#: job.c:3206
+#: job.c:3030
 msgid ""
 "Batch file contents:\n"
 "\t@echo off\n"
 msgstr ""
+"批处理文件内容:\n"
+"\t@echo off\n"
 
-#: job.c:3395
+#: job.c:3219
 #, c-format
 msgid ""
 "Batch file contents:%s\n"
 "\t%s\n"
 msgstr ""
+"批处理文件内容:%s\n"
+"\t%s\n"
 
-#: job.c:3503
+#: job.c:3327
 #, c-format
 msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"
 msgstr "%s (行 %d) 错误的 shell 上下文 (!unixy && !batch_mode_shell)\n"
 
 #: job.h:43
 msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build."
-msgstr ""
+msgstr "-O[类型] (--output-sync[=类型]) 并未配置入此 make 构建。"
 
 #: load.c:60
 #, c-format
 msgid "Failed to open global symbol table: %s"
-msgstr ""
+msgstr "打开全局符号表失败:%s"
 
 #: load.c:97
 #, c-format
 msgid "Loaded object %s is not declared to be GPL compatible"
-msgstr ""
+msgstr "已加载的对象 %s 未声明为 GPL 兼容"
 
 #: load.c:104
 #, c-format
 msgid "Failed to load symbol %s from %s: %s"
-msgstr ""
+msgstr "从 %2$s 加载符号 %1$s 失败:%3$s"
 
 #: load.c:149
 #, c-format
 msgid "Empty symbol name for load: %s"
-msgstr ""
+msgstr "要加载的符号名为空:%s"
 
-#: load.c:205
+#: load.c:204
 #, c-format
 msgid "Loading symbol %s from %s\n"
-msgstr ""
+msgstr "正从 %2$s 加载符号 %1$s\n"
 
-#: load.c:244
-#, fuzzy
+#: load.c:256
 msgid "The 'load' operation is not supported on this platform."
-msgstr "本平台不支持并行任务 (-j)。"
+msgstr "本平台不支持“load”操作。"
 
-#: main.c:313
+#: main.c:338
 msgid "Options:\n"
 msgstr "选项:\n"
 
-#: main.c:314
+#: main.c:339
 msgid "  -b, -m                      Ignored for compatibility.\n"
-msgstr "  -b, -m                      忽略兼容性。\n"
+msgstr "  -b, -m                      为兼容性而忽略。\n"
 
-#: main.c:316
+#: main.c:341
 msgid "  -B, --always-make           Unconditionally make all targets.\n"
-msgstr "  -B, --always-make           无条件 make 所有目标。\n"
+msgstr "  -B, --always-make           无条件制作 (make) 所有目标。\n"
 
-#: main.c:318
+#: main.c:343
 msgid ""
 "  -C DIRECTORY, --directory=DIRECTORY\n"
 "                              Change to DIRECTORY before doing anything.\n"
-msgstr ""
-"  -C DIRECTORY, --directory=DIRECTORY\n"
-"                              在执行前先切换到 DIRECTORY 目录。\n"
+msgstr "  -C 目录, --directory=目录    在执行前先切换到 <目录>。\n"
 
-#: main.c:321
+#: main.c:346
 msgid "  -d                          Print lots of debugging information.\n"
 msgstr "  -d                          打印大量调试信息。\n"
 
-#: main.c:323
+#: main.c:348
 msgid ""
 "  --debug[=FLAGS]             Print various types of debugging information.\n"
-msgstr "  --debug[=FLAGS]             打印各种调试信息。\n"
+msgstr "  --debug[=旗标]               打印各种调试信息。\n"
 
-#: main.c:325
+#: main.c:350
 msgid ""
 "  -e, --environment-overrides\n"
 "                              Environment variables override makefiles.\n"
@@ -895,49 +874,46 @@ msgstr ""
 "  -e, --environment-overrides\n"
 "                              环境变量覆盖 makefile 中的变量。\n"
 
-#: main.c:328
+#: main.c:353
 msgid ""
 "  --eval=STRING               Evaluate STRING as a makefile statement.\n"
-msgstr ""
+msgstr "  --eval=字串               将 <字串> 作为 makefile 语句估值。\n"
 
-#: main.c:330
+#: main.c:355
 msgid ""
 "  -f FILE, --file=FILE, --makefile=FILE\n"
 "                              Read FILE as a makefile.\n"
 msgstr ""
-"  -f FILE, --file=FILE, --makefile=FILE\n"
-"                              从 FILE 中读入 makefile。\n"
+"  -f 文件, --file=文件, --makefile=文件\n"
+"                              从 <文件> 中读入 makefile。\n"
 
-#: main.c:333
+#: main.c:358
 msgid "  -h, --help                  Print this message and exit.\n"
 msgstr "  -h, --help                  打印该消息并退出。\n"
 
-#: main.c:335
-#, fuzzy
+#: main.c:360
 msgid "  -i, --ignore-errors         Ignore errors from recipes.\n"
-msgstr "  -i, --ignore-errors         忽略来自命令的错误。\n"
+msgstr "  -i, --ignore-errors         忽略来自命令配方的错误。\n"
 
-#: main.c:337
+#: main.c:362
 msgid ""
 "  -I DIRECTORY, --include-dir=DIRECTORY\n"
 "                              Search DIRECTORY for included makefiles.\n"
-msgstr ""
-"  -I DIRECTORY, --include-dir=DIRECTORY\n"
-"                              在 DIRECTORY 中搜索被包含的 makefile。\n"
+msgstr "  -I 目录, --include-dir=目录  在 <目录> 中搜索被包含的 makefile。\n"
 
-#: main.c:340
+#: main.c:365
 msgid ""
 "  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no "
 "arg.\n"
 msgstr ""
 "  -j [N], --jobs[=N]          同时允许 N 个任务;无参数表明允许无限个任务。\n"
 
-#: main.c:342
+#: main.c:367
 msgid ""
 "  -k, --keep-going            Keep going when some targets can't be made.\n"
-msgstr "  -k, --keep-going            å½\93æ\9f\90äº\9bç\9b®æ \87æ\97 æ³\95å\88\9b建时仍然继续。\n"
+msgstr "  -k, --keep-going            å½\93æ\9f\90äº\9bç\9b®æ \87æ\97 æ³\95å\88¶ä½\9c时仍然继续。\n"
 
-#: main.c:344
+#: main.c:369
 msgid ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              Don't start multiple jobs unless load is below "
@@ -946,64 +922,63 @@ msgstr ""
 "  -l [N], --load-average[=N], --max-load[=N]\n"
 "                              在系统负载高于 N 时不启动多任务。\n"
 
-#: main.c:347
+#: main.c:372
 msgid ""
 "  -L, --check-symlink-times   Use the latest mtime between symlinks and "
 "target.\n"
 msgstr ""
 "  -L, --check-symlink-times   使用软链接及软链接目标中修改时间较晚的一个。\n"
 
-#: main.c:349
-#, fuzzy
+#: main.c:374
 msgid ""
 "  -n, --just-print, --dry-run, --recon\n"
 "                              Don't actually run any recipe; just print "
 "them.\n"
 msgstr ""
 "  -n, --just-print, --dry-run, --recon\n"
-"                              只打印命令,不实际执行。\n"
+"                              只打印命令配方,不实际执行。\n"
 
-#: main.c:352
+#: main.c:377
 msgid ""
 "  -o FILE, --old-file=FILE, --assume-old=FILE\n"
 "                              Consider FILE to be very old and don't remake "
 "it.\n"
 msgstr ""
-"  -o FILE, --old-file=FILE, --assume-old=FILE\n"
-"                              将 FILE 当做很旧,不必重新生成。\n"
+"  -o 文件, --old-file=文件, --assume-old=文件\n"
+"                              将 <文件> 当做很旧,不必重新制作。\n"
 
-#: main.c:355
+#: main.c:380
 msgid ""
 "  -O[TYPE], --output-sync[=TYPE]\n"
 "                              Synchronize output of parallel jobs by TYPE.\n"
 msgstr ""
+"  -O[类型], --output-sync[=类型]\n"
+"                           使用 <类型> 方式同步并行任务输出。\n"
 
-#: main.c:358
+#: main.c:383
 msgid "  -p, --print-data-base       Print make's internal database.\n"
 msgstr "  -p, --print-data-base       打印 make 的内部数据库。\n"
 
-#: main.c:360
-#, fuzzy
+#: main.c:385
 msgid ""
 "  -q, --question              Run no recipe; exit status says if up to "
 "date.\n"
 msgstr ""
-"  -q, --question              不运行任何命令;退出状态说明是否已全部更新。\n"
+"  -q, --question              不运行任何配方;退出状态说明是否已全部更新。\n"
 
-#: main.c:362
+#: main.c:387
 msgid "  -r, --no-builtin-rules      Disable the built-in implicit rules.\n"
 msgstr "  -r, --no-builtin-rules      禁用内置隐含规则。\n"
 
-#: main.c:364
+#: main.c:389
 msgid "  -R, --no-builtin-variables  Disable the built-in variable settings.\n"
 msgstr "  -R, --no-builtin-variables  禁用内置变量设置。\n"
 
-#: main.c:366
-#, fuzzy
+#: main.c:391
 msgid "  -s, --silent, --quiet       Don't echo recipes.\n"
-msgstr "  -s, --silent, --quiet       不输出命令。\n"
+msgstr "  -s, --silent, --quiet       不输出配方命令。\n"
 
-#: main.c:368
+#: main.c:393
 msgid ""
 "  -S, --no-keep-going, --stop\n"
 "                              Turns off -k.\n"
@@ -1011,65 +986,66 @@ msgstr ""
 "  -S, --no-keep-going, --stop\n"
 "                              关闭 -k。\n"
 
-#: main.c:371
+#: main.c:396
 msgid "  -t, --touch                 Touch targets instead of remaking them.\n"
-msgstr "  -t, --touch                 touch 目标而不是重新创建它们。\n"
+msgstr ""
+"  -t, --touch                 touch 目标(更新修改时间)而不是重新制作它"
+"们。\n"
 
-#: main.c:373
-#, fuzzy
+#: main.c:398
 msgid "  --trace                     Print tracing information.\n"
-msgstr "  --debug[=FLAGS]             打印各种调试信息。\n"
+msgstr "  --trace                     打印跟踪信息。\n"
 
-#: main.c:375
+#: main.c:400
 msgid ""
 "  -v, --version               Print the version number of make and exit.\n"
 msgstr "  -v, --version               打印 make 的版本号并退出。\n"
 
-#: main.c:377
+#: main.c:402
 msgid "  -w, --print-directory       Print the current directory.\n"
 msgstr "  -w, --print-directory       打印当前目录。\n"
 
-#: main.c:379
+#: main.c:404
 msgid ""
 "  --no-print-directory        Turn off -w, even if it was turned on "
 "implicitly.\n"
 msgstr "  --no-print-directory        关闭 -w,即使 -w 默认开启。\n"
 
-#: main.c:381
+#: main.c:406
 msgid ""
 "  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
 "                              Consider FILE to be infinitely new.\n"
 msgstr ""
-"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n"
-"                              将 FILE 当做最新。\n"
+"  -W 文件, --what-if=文件, --new-file=文件, --assume-new=文件\n"
+"                              将 <文件> 当做最新。\n"
 
-#: main.c:384
+#: main.c:409
 msgid ""
 "  --warn-undefined-variables  Warn when an undefined variable is "
 "referenced.\n"
 msgstr "  --warn-undefined-variables  当引用未定义变量的时候发出警告。\n"
 
-#: main.c:654
+#: main.c:683
 msgid "empty string invalid as file name"
 msgstr "空字符串是无效的文件名"
 
-#: main.c:737
-#, fuzzy, c-format
+#: main.c:766
+#, c-format
 msgid "unknown debug level specification '%s'"
-msgstr "未知的调试级别“%s”"
+msgstr "未知的调试级别定义“%s”"
 
-#: main.c:774
+#: main.c:806
 #, c-format
 msgid "unknown output-sync type '%s'"
-msgstr ""
+msgstr "不明输出同步类型“%s”"
 
-#: main.c:828
-#, fuzzy, c-format
+#: main.c:861
+#, c-format
 msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"
-msgstr "%s:捕获中断/异常 (代码 = 0x%lx, 地址 = 0x%lx)\n"
+msgstr "%s:捕获中断/异常 (代码 = 0x%lx, 地址 = 0x%p)\n"
 
-#: main.c:835
-#, fuzzy, c-format
+#: main.c:868
+#, c-format
 msgid ""
 "\n"
 "Unhandled exception filter called from program %s\n"
@@ -1081,178 +1057,134 @@ msgstr ""
 "从程序 %s 产生的未处理的异常过滤器\n"
 "异常码 = %lx\n"
 "异常标志 = %lx\n"
-"异常地址 = %lx\n"
+"异常地址 = 0x%p\n"
 
-#: main.c:843
-#, fuzzy, c-format
+#: main.c:876
+#, c-format
 msgid "Access violation: write operation at address 0x%p\n"
-msgstr "访问冲突:地址 %lx 处的写操作\n"
+msgstr "访问冲突:地址 0x%p 处的写操作\n"
 
-#: main.c:844
-#, fuzzy, c-format
+#: main.c:877
+#, c-format
 msgid "Access violation: read operation at address 0x%p\n"
-msgstr "访问冲突:地址 %lx处的读操作\n"
+msgstr "访问冲突:地址 0x%p 处的读操作\n"
 
-#: main.c:920 main.c:935
-#, fuzzy, c-format
+#: main.c:953 main.c:968
+#, c-format
 msgid "find_and_set_shell() setting default_shell = %s\n"
-msgstr "find_and_set_shell 设置 default_shell = %s\n"
+msgstr "find_and_set_shell() 设置 default_shell = %s\n"
 
-#: main.c:988
-#, fuzzy, c-format
+#: main.c:1021
+#, c-format
 msgid "find_and_set_shell() path search set default_shell = %s\n"
-msgstr "find_and_set_shell 路径搜索结果设置 default_shell = %s\n"
+msgstr "find_and_set_shell() 路径搜索结果设置 default_shell = %s\n"
 
-#: main.c:1436
+#: main.c:1538
 #, c-format
 msgid "%s is suspending for 30 seconds..."
 msgstr "%s 正在挂起 30 秒..."
 
-#: main.c:1438
+#: main.c:1540
 #, c-format
 msgid "done sleep(30). Continuing.\n"
 msgstr "睡眠完成(30)。继续。\n"
 
-#: main.c:1527
-#, c-format
+#: main.c:1627
 msgid ""
-"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
-msgstr ""
-
-#: main.c:1530
-#, c-format
-msgid "Jobserver client (semaphore %s)\n"
-msgstr ""
-
-#: main.c:1534
-#, fuzzy, c-format
-msgid "internal error: invalid --jobserver-fds string '%s'"
-msgstr "内部错误:非法 --jobserver-fds 字符串“%s”"
-
-#: main.c:1537
-#, c-format
-msgid "Jobserver client (fds %d,%d)\n"
-msgstr ""
+"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
+msgstr "警告: jobserver 不可用: 正使用 -j1。添加 “+” 到父 make 的规则。"
 
-#: main.c:1551
+#: main.c:1635
 msgid "warning: -jN forced in submake: disabling jobserver mode."
 msgstr "警告: 子 make 中强制 -jN: 关闭 jobserver 模式。"
 
-#: main.c:1567
-msgid "dup jobserver"
-msgstr "复制任务服务器"
-
-#: main.c:1570
-#, fuzzy
-msgid ""
-"warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."
-msgstr "警告: jobserver 不存在: 使用 -j1。添加 “+” 到父 make 的规则。"
-
-#: main.c:1742
+#: main.c:1805
 msgid "Makefile from standard input specified twice."
 msgstr "两次指明来自标准输入的 makefile。"
 
-#: main.c:1780 vmsjobs.c:653
+#: main.c:1843 vmsjobs.c:1252
 msgid "fopen (temporary file)"
 msgstr "fopen (临时文件)"
 
-#: main.c:1786
+#: main.c:1849
 msgid "fwrite (temporary file)"
 msgstr "fwrite (临时文件)"
 
-#: main.c:1974
+#: main.c:2048
 msgid "Parallel jobs (-j) are not supported on this platform."
 msgstr "本平台不支持并行任务 (-j)。"
 
-#: main.c:1975
+#: main.c:2049
 msgid "Resetting to single job (-j1) mode."
 msgstr "重置为单任务模式 (-j1)。"
 
-#: main.c:1994
-#, c-format
-msgid "Jobserver slots limited to %d\n"
-msgstr ""
-
-#: main.c:2002
-#, c-format
-msgid "creating jobserver semaphore: (Error %ld: %s)"
-msgstr ""
-
-#: main.c:2008
-msgid "creating jobs pipe"
-msgstr "正在创建任务管道"
-
-#: main.c:2028
-msgid "init jobserver pipe"
-msgstr "创始化任务服务器管道"
-
-#: main.c:2047
+#: main.c:2088
 msgid "Symbolic links not supported: disabling -L."
 msgstr "不支持软链接: 关闭 -L"
 
-#: main.c:2133
+#: main.c:2170
 msgid "Updating makefiles....\n"
 msgstr "正在更新 makefile....\n"
 
-#: main.c:2158
-#, fuzzy, c-format
+#: main.c:2195
+#, c-format
 msgid "Makefile '%s' might loop; not remaking it.\n"
-msgstr "Makefile “%s”可能循环;不会重新创建它。\n"
+msgstr "Makefile “%s”可能循环;不会重新执行它。\n"
 
-#: main.c:2237
-#, fuzzy, c-format
+#: main.c:2283
+#, c-format
 msgid "Failed to remake makefile '%s'."
-msgstr "重新创建 makefile “%s” 失败。"
+msgstr "重新执行 makefile“%s”失败。"
 
-#: main.c:2257
-#, fuzzy, c-format
+#: main.c:2303
+#, c-format
 msgid "Included makefile '%s' was not found."
-msgstr "找不到被引入的 makefile “%s”"
+msgstr "找不到被引入的 makefile“%s”。"
 
-#: main.c:2262
-#, fuzzy, c-format
+#: main.c:2308
+#, c-format
 msgid "Makefile '%s' was not found"
-msgstr "找不到 makefile “%s”"
+msgstr "找不到 makefile “%s”"
 
-#: main.c:2330
+#: main.c:2376
 msgid "Couldn't change back to original directory."
 msgstr "无法回到原始目录。"
 
-#: main.c:2343
+#: main.c:2384
 #, c-format
 msgid "Re-executing[%u]:"
 msgstr "重新执行[%u]:"
 
-#: main.c:2453
+#: main.c:2491
 msgid "unlink (temporary file): "
 msgstr "删除 (临时文件):"
 
-#: main.c:2486
+#: main.c:2524
 msgid ".DEFAULT_GOAL contains more than one target"
 msgstr ".DEFAULT_GOAL 包含多余一个目标"
 
-#: main.c:2509
+#: main.c:2547
 msgid "No targets specified and no makefile found"
 msgstr "没有指明目标并且找不到 makefile"
 
-#: main.c:2511
+#: main.c:2549
 msgid "No targets"
 msgstr "无目标"
 
-#: main.c:2516
+#: main.c:2554
 msgid "Updating goal targets....\n"
 msgstr "更新目标....\n"
 
-#: main.c:2541
+#: main.c:2578
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
-msgstr "警告:检测到时钟错误。您的创建可能是不完整的。"
+msgstr "警告:检测到时钟错误。您的构建版本可能是不完整的。"
 
-#: main.c:2710
+#: main.c:2772
 #, c-format
 msgid "Usage: %s [options] [target] ...\n"
 msgstr "用法:%s [选项] [目标] ...\n"
 
-#: main.c:2716
+#: main.c:2778
 #, c-format
 msgid ""
 "\n"
@@ -1261,7 +1193,7 @@ msgstr ""
 "\n"
 "该程序为 %s 编译\n"
 
-#: main.c:2718
+#: main.c:2780
 #, c-format
 msgid ""
 "\n"
@@ -1270,36 +1202,32 @@ msgstr ""
 "\n"
 "该程序为 %s (%s) 编译\n"
 
-#: main.c:2721
+#: main.c:2783
 #, c-format
 msgid "Report bugs to <bug-make@gnu.org>\n"
 msgstr "报告错误到 <bug-make@gnu.org>\n"
 
-#: main.c:2807
-#, fuzzy, c-format
+#: main.c:2869
+#, c-format
 msgid "the '%s%s' option requires a non-empty string argument"
-msgstr "“-%c”选项需要非空字符串参数"
+msgstr "“%s%s”选项需要非空字符串参数"
 
-#: main.c:2871
-#, fuzzy, c-format
+#: main.c:2933
+#, c-format
 msgid "the '-%c' option requires a positive integer argument"
 msgstr "“-%c”选项需要正整数参数"
 
-#: main.c:3269
-#, fuzzy, c-format
+#: main.c:3331
+#, c-format
 msgid "%sBuilt for %s\n"
-msgstr ""
-"\n"
-"%s该程序为 %s 编译\n"
+msgstr "%s为 %s 编译\n"
 
-#: main.c:3271
-#, fuzzy, c-format
+#: main.c:3333
+#, c-format
 msgid "%sBuilt for %s (%s)\n"
-msgstr ""
-"\n"
-"%s该程序为 %s (%s) 编译\n"
+msgstr "%s为 %s (%s) 编译\n"
 
-#: main.c:3282
+#: main.c:3344
 #, c-format
 msgid ""
 "%sLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -1307,8 +1235,12 @@ msgid ""
 "%sThis is free software: you are free to change and redistribute it.\n"
 "%sThere is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
+"%s许可证:GPLv3+:GNU 通用公共许可证第 3 版或更新版本<http://gnu.org/"
+"licenses/gpl.html>。\n"
+"%s本软件是自由软件:您可以自由修改和重新发布它。\n"
+"%s在法律允许的范围内没有其他保证。\n"
 
-#: main.c:3303
+#: main.c:3365
 #, c-format
 msgid ""
 "\n"
@@ -1317,7 +1249,7 @@ msgstr ""
 "\n"
 "# make 数据基础,打印在 %s"
 
-#: main.c:3313
+#: main.c:3375
 #, c-format
 msgid ""
 "\n"
@@ -1326,29 +1258,29 @@ msgstr ""
 "\n"
 "# 在 %s 上完成 make 数据基础\n"
 
-#: misc.c:201
+#: misc.c:202
 #, c-format
 msgid "Unknown error %d"
 msgstr "未知错误 %d"
 
-#: misc.c:522
+#: misc.c:508
 #, c-format
 msgid "%s: user %lu (real %lu), group %lu (real %lu)\n"
 msgstr "%s: 用户 %lu (真实用户 %lu), 组 %lu (真实组 %lu)\n"
 
-#: misc.c:543
+#: misc.c:529
 msgid "Initialized access"
 msgstr "初始化成功"
 
-#: misc.c:622
+#: misc.c:608
 msgid "User access"
 msgstr "用户权限"
 
-#: misc.c:670
+#: misc.c:656
 msgid "Make access"
 msgstr "Make 权限"
 
-#: misc.c:704
+#: misc.c:690
 msgid "Child access"
 msgstr "子进程 权限"
 
@@ -1363,12 +1295,12 @@ msgid "%s: Leaving an unknown directory\n"
 msgstr "%s: 离开一个未知的目录\n"
 
 #: output.c:109
-#, fuzzy, c-format
+#, c-format
 msgid "%s: Entering directory '%s'\n"
 msgstr "%s: 进入目录“%s”\n"
 
 #: output.c:111
-#, fuzzy, c-format
+#, c-format
 msgid "%s: Leaving directory '%s'\n"
 msgstr "%s: 离开目录“%s”\n"
 
@@ -1383,19 +1315,18 @@ msgid "%s[%u]: Leaving an unknown directory\n"
 msgstr "%s[%u]: 离开一个未知的目录\n"
 
 #: output.c:120
-#, fuzzy, c-format
+#, c-format
 msgid "%s[%u]: Entering directory '%s'\n"
 msgstr "%s[%u]: 进入目录“%s”\n"
 
 #: output.c:122
-#, fuzzy, c-format
+#, c-format
 msgid "%s[%u]: Leaving directory '%s'\n"
 msgstr "%s[%u]: 离开目录“%s”\n"
 
 #: output.c:495 output.c:497
-#, fuzzy
 msgid "write error: stdout"
-msgstr "写错误: %s"
+msgstr "写错误: 标准输出"
 
 #: output.c:677
 msgid ".  Stop.\n"
@@ -1411,370 +1342,398 @@ msgstr "%s%s: %s"
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: read.c:180
+#: posixos.c:69
+msgid "creating jobs pipe"
+msgstr "正在创建任务管道"
+
+#: posixos.c:72 posixos.c:227
+msgid "duping jobs pipe"
+msgstr "正在复制任务管道"
+
+#: posixos.c:78
+msgid "init jobserver pipe"
+msgstr "创始化任务服务器管道"
+
+#: posixos.c:90
+#, c-format
+msgid "internal error: invalid --jobserver-auth string '%s'"
+msgstr "内部错误:非法 --jobserver-auth 验证字符串“%s”"
+
+#: posixos.c:93
+#, c-format
+msgid "Jobserver client (fds %d,%d)\n"
+msgstr "jobserver 客户端(文件描述符 %d,%d)\n"
+
+#: posixos.c:109
+msgid "jobserver pipeline"
+msgstr "任务服务器管道"
+
+#: posixos.c:154
+msgid "write jobserver"
+msgstr "写入任务服务器"
+
+# , fuzzy
+#: posixos.c:268
+msgid "pselect jobs pipe"
+msgstr "pselect 任务管道"
+
+#: posixos.c:279 posixos.c:391
+msgid "read jobs pipe"
+msgstr "读取任务管道"
+
+#: read.c:178
 msgid "Reading makefiles...\n"
 msgstr "正在读入 makefiles...\n"
 
-#: read.c:335
-#, fuzzy, c-format
+#: read.c:329
+#, c-format
 msgid "Reading makefile '%s'"
 msgstr "正在读入 makefile “%s”"
 
-#: read.c:337
+#: read.c:331
 #, c-format
 msgid " (no default goal)"
 msgstr " (没有缺省目标)"
 
-#: read.c:339
+#: read.c:333
 #, c-format
 msgid " (search path)"
 msgstr " (搜索路径)"
 
-#: read.c:341
+#: read.c:335
 #, c-format
 msgid " (don't care)"
 msgstr " (不用理)"
 
-#: read.c:343
+#: read.c:337
 #, c-format
 msgid " (no ~ expansion)"
 msgstr " (没有 ~ 扩展)"
 
-#: read.c:656
+#: read.c:651
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile '%s'\n"
-msgstr ""
+msgstr "跳过 Makefile“%s”中的 UTF-8 BOM\n"
 
-#: read.c:659
+#: read.c:654
 #, c-format
 msgid "Skipping UTF-8 BOM in makefile buffer\n"
-msgstr ""
+msgstr "跳过 Makefile 缓冲区中的 UTF-8 BOM\n"
 
-#: read.c:789
+#: read.c:783
 msgid "invalid syntax in conditional"
 msgstr "条件中含有无效语法"
 
-#: read.c:966
+#: read.c:959
 #, c-format
 msgid "%s: failed to load"
-msgstr ""
+msgstr "%s: 加载失败"
 
-#: read.c:992
-#, fuzzy
+#: read.c:985
 msgid "recipe commences before first target"
-msgstr "命令在第一个目标前开始"
+msgstr "配方在第一个目标前开始"
 
-#: read.c:1041
-#, fuzzy
+#: read.c:1034
 msgid "missing rule before recipe"
-msgstr "命令之前遗漏了规则"
+msgstr "配方之前遗漏了规则"
 
-#: read.c:1131
-#, fuzzy
+#: read.c:1124
 msgid "missing separator (did you mean TAB instead of 8 spaces?)"
-msgstr " (您的意思是用 TAB 代替 8 个空格?)"
+msgstr "分隔符缺失 (你大概想用 TAB,而不是八个空格)"
 
-#: read.c:1133
-#, fuzzy
+#: read.c:1126
 msgid "missing separator"
 msgstr "遗漏分隔符 %s"
 
-#: read.c:1270
+#: read.c:1262
 msgid "missing target pattern"
 msgstr "无目标匹配"
 
-#: read.c:1272
+#: read.c:1264
 msgid "multiple target patterns"
 msgstr "多个目标匹配"
 
-#: read.c:1276
-#, fuzzy, c-format
+#: read.c:1268
+#, c-format
 msgid "target pattern contains no '%%'"
 msgstr "目标模式不含有“%%”"
 
-#: read.c:1398
-#, fuzzy
+#: read.c:1390
 msgid "missing 'endif'"
 msgstr "遗漏“endif”"
 
-#: read.c:1436 read.c:1481 variable.c:1546
+#: read.c:1428 read.c:1473 variable.c:1576
 msgid "empty variable name"
 msgstr "空变量名"
 
-#: read.c:1471
-#, fuzzy
+#: read.c:1463
 msgid "extraneous text after 'define' directive"
 msgstr "“endef”指令后含有不该出现的文字"
 
-#: read.c:1496
-#, fuzzy
+#: read.c:1488
 msgid "missing 'endef', unterminated 'define'"
 msgstr "遗漏“endef”,未终止的“define”"
 
-#: read.c:1524
-#, fuzzy
+#: read.c:1516
 msgid "extraneous text after 'endef' directive"
 msgstr "“endef”指令后含有不该出现的文字"
 
-#: read.c:1595
-#, fuzzy, c-format
+#: read.c:1588
+#, c-format
 msgid "extraneous text after '%s' directive"
 msgstr "在“%s”指令之后含有不该出现的文字"
 
-#: read.c:1596
-#, fuzzy, c-format
+#: read.c:1589
+#, c-format
 msgid "extraneous '%s'"
 msgstr "不该出现的“%s”"
 
-#: read.c:1624
-#, fuzzy
+#: read.c:1617
 msgid "only one 'else' per conditional"
 msgstr "每个条件只能有一个“else”"
 
-#: read.c:1899
+#: read.c:1892
 msgid "Malformed target-specific variable definition"
 msgstr "畸形的针对目标的标量定义"
 
-#: read.c:1957
-#, fuzzy
+#: read.c:1950
 msgid "prerequisites cannot be defined in recipes"
-msgstr "依赖无法在命令脚本中定义"
+msgstr "依赖无法在配方脚本中定义"
 
-#: read.c:2015
+#: read.c:2009
 msgid "mixed implicit and static pattern rules"
 msgstr "混和的隐含和静态模式规则"
 
-#: read.c:2038
+#: read.c:2032
 msgid "mixed implicit and normal rules"
 msgstr "混和的隐含和普通规则"
 
-#: read.c:2091
-#, fuzzy, c-format
+#: read.c:2085
+#, c-format
 msgid "target '%s' doesn't match the target pattern"
 msgstr "目标“%s”不匹配目标模式"
 
-#: read.c:2106 read.c:2152
-#, fuzzy, c-format
+#: read.c:2100 read.c:2146
+#, c-format
 msgid "target file '%s' has both : and :: entries"
 msgstr "目标文件“%s”含有 : 和 :: 两种条目"
 
-#: read.c:2112
-#, fuzzy, c-format
+#: read.c:2106
+#, c-format
 msgid "target '%s' given more than once in the same rule"
 msgstr "目标“%s”在同一个规则中给出了多次。"
 
-#: read.c:2122
-#, fuzzy, c-format
+#: read.c:2116
+#, c-format
 msgid "warning: overriding recipe for target '%s'"
-msgstr "警告:覆盖关于目标“%s”的命令"
+msgstr "警告:覆盖关于目标“%s”的配方"
 
-#: read.c:2125
-#, fuzzy, c-format
+#: read.c:2119
+#, c-format
 msgid "warning: ignoring old recipe for target '%s'"
-msgstr "警告:忽略关于目标“%s”的旧命令"
+msgstr "警告:忽略关于目标“%s”的旧配方"
 
-#: read.c:2229
-#, fuzzy
+#: read.c:2223
 msgid "*** mixed implicit and normal rules: deprecated syntax"
-msgstr "混和的隐含和普通规则"
+msgstr "*** 隐含和普通规则混合:已弃用的语法"
 
-#: read.c:2539
+#: read.c:2542
 msgid "warning: NUL character seen; rest of line ignored"
 msgstr "警告:遇到了 NUL 字符;忽略行的剩余部分"
 
-#: remake.c:230
-#, fuzzy, c-format
+#: remake.c:225
+#, c-format
 msgid "Nothing to be done for '%s'."
 msgstr "对“%s”无需做任何事。"
 
-#: remake.c:231
-#, fuzzy, c-format
+#: remake.c:226
+#, c-format
 msgid "'%s' is up to date."
-msgstr "“%s”是最新的。"
+msgstr "“%s”已是最新。"
 
-#: remake.c:303
-#, fuzzy, c-format
+#: remake.c:322
+#, c-format
 msgid "Pruning file '%s'.\n"
-msgstr "æ­£å\9c¨å\88 é\99¤æ\96\87件â\80\9c%sâ\80\9dã\80\82\n"
+msgstr "正删除文件“%s”。\n"
 
-#: remake.c:390 remake.c:393
-#, fuzzy, c-format
+#: remake.c:405
+#, c-format
 msgid "%sNo rule to make target '%s', needed by '%s'%s"
-msgstr "%1$s没有规则可以创建“%3$s”%4$s需要的目标“%2$s”"
+msgstr "%s没有规则可制作目标“%s”,由“%s”%s 需求"
 
-#: remake.c:402 remake.c:405
-#, fuzzy, c-format
+#: remake.c:415
+#, c-format
 msgid "%sNo rule to make target '%s'%s"
-msgstr "%s没有规则可以创建目标“%s”%s"
+msgstr "%s没有规则可制作目标“%s”%s"
 
-#: remake.c:426
-#, fuzzy, c-format
+#: remake.c:441
+#, c-format
 msgid "Considering target file '%s'.\n"
 msgstr "正在考虑目标文件“%s”。\n"
 
-#: remake.c:433
-#, fuzzy, c-format
+#: remake.c:448
+#, c-format
 msgid "Recently tried and failed to update file '%s'.\n"
 msgstr "最近已尝试过更新文件“%s”并失败。\n"
 
-#: remake.c:445
-#, fuzzy, c-format
+#: remake.c:460
+#, c-format
 msgid "File '%s' was considered already.\n"
 msgstr "已考虑过文件“%s”。\n"
 
-#: remake.c:455
-#, fuzzy, c-format
+#: remake.c:470
+#, c-format
 msgid "Still updating file '%s'.\n"
 msgstr "仍然在更新文件“%s”。\n"
 
-#: remake.c:458
-#, fuzzy, c-format
+#: remake.c:473
+#, c-format
 msgid "Finished updating file '%s'.\n"
 msgstr "更新文件“%s”完成。\n"
 
-#: remake.c:487
-#, fuzzy, c-format
+#: remake.c:502
+#, c-format
 msgid "File '%s' does not exist.\n"
 msgstr "文件“%s”不存在。\n"
 
-#: remake.c:495
-#, fuzzy, c-format
+#: remake.c:510
+#, c-format
 msgid ""
 "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"
-msgstr "*** 警告: .LOW_RESOLUTION_TIME 文件 `%s' 有一个精细的时间标志"
+msgstr "*** 警告: .LOW_RESOLUTION_TIME 文件 `%s' 有一个高精度的的时间标志"
 
-#: remake.c:508 remake.c:1040
-#, fuzzy, c-format
+#: remake.c:523 remake.c:1055
+#, c-format
 msgid "Found an implicit rule for '%s'.\n"
 msgstr "找到一条关于“%s”的隐含规则。\n"
 
-#: remake.c:510 remake.c:1042
-#, fuzzy, c-format
+#: remake.c:525 remake.c:1057
+#, c-format
 msgid "No implicit rule found for '%s'.\n"
 msgstr "找不到关于“%s”的隐含规则。\n"
 
-#: remake.c:516
-#, fuzzy, c-format
+#: remake.c:531
+#, c-format
 msgid "Using default recipe for '%s'.\n"
-msgstr "使用关于“%s”的默认命令。\n"
+msgstr "使用“%s”的默认配方。\n"
 
-#: remake.c:550 remake.c:1089
+#: remake.c:565 remake.c:1104
 #, c-format
 msgid "Circular %s <- %s dependency dropped."
 msgstr "放弃循环依赖 %s <- %s 。"
 
-#: remake.c:675
-#, fuzzy, c-format
+#: remake.c:690
+#, c-format
 msgid "Finished prerequisites of target file '%s'.\n"
 msgstr "目标文件“%s”的前提已完成。\n"
 
-#: remake.c:681
-#, fuzzy, c-format
+#: remake.c:696
+#, c-format
 msgid "The prerequisites of '%s' are being made.\n"
-msgstr "æ­£å\9c¨å\88\9b建“%s”的前提。\n"
+msgstr "æ­£å\9c¨å\88¶ä½\9c“%s”的前提。\n"
 
-#: remake.c:695
-#, fuzzy, c-format
+#: remake.c:710
+#, c-format
 msgid "Giving up on target file '%s'.\n"
 msgstr "放弃目标文件“%s”。\n"
 
-#: remake.c:700
-#, fuzzy, c-format
+#: remake.c:715
+#, c-format
 msgid "Target '%s' not remade because of errors."
-msgstr "ç\94±äº\8eé\94\99误ç\9b®æ \87â\80\9c%sâ\80\9d并æ\9cªé\87\8dæ\96°å\88\9b建。"
+msgstr "ç\94±äº\8eé\94\99误ç\9b®æ \87â\80\9c%sâ\80\9d并æ\9cªé\87\8dæ\96°å\88¶ä½\9c。"
 
-#: remake.c:752
-#, fuzzy, c-format
+#: remake.c:767
+#, c-format
 msgid "Prerequisite '%s' is order-only for target '%s'.\n"
-msgstr "“%s”是目标“%s”的一个仅用于指定执行顺序(order-only)的前提。\n"
+msgstr "前提“%s”对目标“%s”来说仅用于指定执行顺序 (order-only) 。\n"
 
-#: remake.c:757
-#, fuzzy, c-format
+#: remake.c:772
+#, c-format
 msgid "Prerequisite '%s' of target '%s' does not exist.\n"
 msgstr "目标“%2$s”的前提“%1$s”不存在。\n"
 
-#: remake.c:762
-#, fuzzy, c-format
+#: remake.c:777
+#, c-format
 msgid "Prerequisite '%s' is newer than target '%s'.\n"
 msgstr "前提“%s”比目标“%s”新。\n"
 
-#: remake.c:765
-#, fuzzy, c-format
+#: remake.c:780
+#, c-format
 msgid "Prerequisite '%s' is older than target '%s'.\n"
 msgstr "前提“%s”比目标“%s”旧。\n"
 
-#: remake.c:783
-#, fuzzy, c-format
+#: remake.c:798
+#, c-format
 msgid "Target '%s' is double-colon and has no prerequisites.\n"
 msgstr "目标“%s”是双冒号目标并且没有前提。\n"
 
-#: remake.c:790
-#, fuzzy, c-format
+#: remake.c:805
+#, c-format
 msgid "No recipe for '%s' and no prerequisites actually changed.\n"
-msgstr "没有关于“%s”的命令,并且实际上改变了的前提。\n"
+msgstr "没有关于“%s”的配方,并且没有实际改变的前提。\n"
 
-#: remake.c:795
-#, fuzzy, c-format
+#: remake.c:810
+#, c-format
 msgid "Making '%s' due to always-make flag.\n"
-msgstr "由于 always-make 标志所以 make “%s”。\n"
+msgstr "由于 always-make 标志所以制作“%s”。\n"
 
-#: remake.c:803
-#, fuzzy, c-format
+#: remake.c:818
+#, c-format
 msgid "No need to remake target '%s'"
-msgstr "ä¸\8dé\9c\80è¦\81é\87\8dæ\96°å\88\9b建目标“%s”"
+msgstr "ä¸\8dé\9c\80è¦\81é\87\8dæ\96°å\88¶ä½\9c目标“%s”"
 
-#: remake.c:805
-#, fuzzy, c-format
+#: remake.c:820
+#, c-format
 msgid "; using VPATH name '%s'"
 msgstr ";使用 VPATH 名称“%s”"
 
-#: remake.c:825
-#, fuzzy, c-format
+#: remake.c:840
+#, c-format
 msgid "Must remake target '%s'.\n"
-msgstr "å¿\85é¡»é\87\8dæ\96°å\88\9b建目标“%s”。\n"
+msgstr "å¿\85é¡»é\87\8dæ\96°å\88¶ä½\9c目标“%s”。\n"
 
-#: remake.c:831
-#, fuzzy, c-format
+#: remake.c:846
+#, c-format
 msgid "  Ignoring VPATH name '%s'.\n"
-msgstr "  忽略 VPATH 名称 `%s'。\n"
+msgstr "  忽略 VPATH 名称“%s”。\n"
 
-#: remake.c:840
-#, fuzzy, c-format
+#: remake.c:855
+#, c-format
 msgid "Recipe of '%s' is being run.\n"
-msgstr "“%s”的命令正在被执行。\n"
+msgstr "“%s”的命令配方正在被执行。\n"
 
-#: remake.c:847
-#, fuzzy, c-format
+#: remake.c:862
+#, c-format
 msgid "Failed to remake target file '%s'.\n"
-msgstr "é\87\8dæ\96°å\88\9b建目标文件“%s”失败。\n"
+msgstr "é\87\8dæ\96°å\88¶ä½\9c目标文件“%s”失败。\n"
 
-#: remake.c:850
-#, fuzzy, c-format
+#: remake.c:865
+#, c-format
 msgid "Successfully remade target file '%s'.\n"
-msgstr "é\87\8dæ\96°å\88\9b建目标文件“%s”成功。\n"
+msgstr "é\87\8dæ\96°å\88¶ä½\9c目标文件“%s”成功。\n"
 
-#: remake.c:853
-#, fuzzy, c-format
+#: remake.c:868
+#, c-format
 msgid "Target file '%s' needs to be remade under -q.\n"
-msgstr "ç\9b®æ \87æ\96\87件â\80\9c%sâ\80\9dé\9c\80è¦\81以 -q é\80\89项é\87\8dæ\96°å\88\9b建。\n"
+msgstr "ç\9b®æ \87æ\96\87件â\80\9c%sâ\80\9dé\9c\80è¦\81以 -q é\80\89项é\87\8dæ\96°å\88¶ä½\9c。\n"
 
-#: remake.c:1048
-#, fuzzy, c-format
+#: remake.c:1063
+#, c-format
 msgid "Using default commands for '%s'.\n"
 msgstr "使用关于“%s”的默认命令。\n"
 
-#: remake.c:1397
-#, fuzzy, c-format
+#: remake.c:1429
+#, c-format
 msgid "Warning: File '%s' has modification time in the future"
 msgstr "警告:文件“%s”的修改时间在未来"
 
-#: remake.c:1411
-#, fuzzy, c-format
+#: remake.c:1443
+#, c-format
 msgid "Warning: File '%s' has modification time %s s in the future"
-msgstr "警告:文件“%s”的修改时间在 %.2g 秒后"
+msgstr "警告:文件“%s”的修改时间在未来 %s 秒后"
 
-#: remake.c:1610
-#, fuzzy, c-format
+#: remake.c:1646
+#, c-format
 msgid ".LIBPATTERNS element '%s' is not a pattern"
 msgstr ".LIBPATTERNS 的元素“%s”不是一个模式"
 
@@ -1783,7 +1742,7 @@ msgstr ".LIBPATTERNS 的元素“%s”不是一个模式"
 msgid "Customs won't export: %s\n"
 msgstr "用户不希望导出:%s\n"
 
-#: rule.c:495
+#: rule.c:496
 msgid ""
 "\n"
 "# Implicit Rules"
@@ -1791,7 +1750,7 @@ msgstr ""
 "\n"
 "# 隐含规则。"
 
-#: rule.c:510
+#: rule.c:511
 msgid ""
 "\n"
 "# No implicit rules."
@@ -1799,7 +1758,7 @@ msgstr ""
 "\n"
 "# 没有隐含规则。"
 
-#: rule.c:513
+#: rule.c:514
 #, c-format
 msgid ""
 "\n"
@@ -1808,14 +1767,14 @@ msgstr ""
 "\n"
 "# %u 条隐含规则,%u"
 
-#: rule.c:522
+#: rule.c:523
 msgid " terminal."
 msgstr " 终端。"
 
-#: rule.c:530
-#, fuzzy, c-format
+#: rule.c:531
+#, c-format
 msgid "BUG: num_pattern_rules is wrong!  %u != %u"
-msgstr "错误:num_pattern_rules 出错!%u != %u"
+msgstr "BUG:num_pattern_rules 出错!%u != %u"
 
 #: signame.c:84
 msgid "unknown signal"
@@ -1973,94 +1932,98 @@ msgstr "信息请求"
 msgid "Floating point co-processor not available"
 msgstr "浮点数协处理器不可用"
 
-#: strcache.c:236
-#, fuzzy, c-format
+#: strcache.c:274
+#, c-format
 msgid ""
 "\n"
 "%s No strcache buffers\n"
-msgstr "%s strcache 缓冲区数量: %d\n"
+msgstr ""
+"\n"
+"%s 没有 strcache 缓冲区\n"
 
-#: strcache.c:266
-#, fuzzy, c-format
+#: strcache.c:304
+#, c-format
 msgid ""
 "\n"
 "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu "
 "B\n"
-msgstr "%s strcache 剩余: 总共 = %d / 最大 = %d / 最小 = %d / 平均 = %d\n"
+msgstr ""
+"\n"
+"%s strcache 缓冲: %lu (%lu) / 字串 = %lu / 空间 = %lu B / 平均 = %lu B\n"
 
-#: strcache.c:270
+#: strcache.c:308
 #, c-format
 msgid ""
 "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"
-msgstr ""
+msgstr "%s 目前缓冲: 尺寸 = %hu B / 已用 = %hu B / 数量 = %hu / 平均 = %hu B\n"
 
-#: strcache.c:280
-#, fuzzy, c-format
+#: strcache.c:319
+#, c-format
 msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n"
-msgstr "%s strcache 大小: 总共 = %d / 最大 = %d / 最小 = %d / 平均 = %d\n"
+msgstr "%s 其他已用: 总共 = %lu B / 数量 = %lu / 平均 = %lu B\n"
 
-#: strcache.c:283
-#, fuzzy, c-format
+#: strcache.c:322
+#, c-format
 msgid ""
 "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"
-msgstr "%s strcache 剩余: 总共 = %d / 最大 = %d / 最小 = %d / 平均 = %d\n"
+msgstr ""
+"%s 其他空余: 总共 = %lu B / 最大 = %lu B / 最小 = %lu B / 平均 = %hu B\n"
 
-#: strcache.c:287
+#: strcache.c:326
 #, c-format
 msgid ""
 "\n"
 "%s strcache performance: lookups = %lu / hit rate = %lu%%\n"
 msgstr ""
+"\n"
+"%s strcache 性能:查找 = %lu / 命中率 = %lu%%\n"
 
-#: strcache.c:289
-#, fuzzy
+#: strcache.c:328
 msgid ""
 "# hash-table stats:\n"
 "# "
 msgstr ""
-"\n"
-"# 文件杂凑表状态:\n"
+"# 杂凑表统计数据:\n"
 "# "
 
-#: variable.c:1599
+#: variable.c:1629
 msgid "automatic"
 msgstr "自动"
 
-#: variable.c:1602
+#: variable.c:1632
 msgid "default"
 msgstr "默认"
 
-#: variable.c:1605
+#: variable.c:1635
 msgid "environment"
 msgstr "环境"
 
-#: variable.c:1608
+#: variable.c:1638
 msgid "makefile"
 msgstr "makefile"
 
-#: variable.c:1611
+#: variable.c:1641
 msgid "environment under -e"
 msgstr "-e 指定的环境变量"
 
-#: variable.c:1614
+#: variable.c:1644
 msgid "command line"
 msgstr "命令行"
 
-#: variable.c:1617
-#, fuzzy
+#: variable.c:1647
 msgid "'override' directive"
 msgstr "“override”指令"
 
-#: variable.c:1628
-#, fuzzy, c-format
+#: variable.c:1658
+#, c-format
 msgid " (from '%s', line %lu)"
 msgstr " (从“%s”,行 %lu)"
 
-#: variable.c:1691
+#: variable.c:1721
 msgid "# variable set hash-table stats:\n"
 msgstr "# 变量的杂凑表状态:\n"
 
-#: variable.c:1702
+#: variable.c:1732
 msgid ""
 "\n"
 "# Variables\n"
@@ -2068,7 +2031,7 @@ msgstr ""
 "\n"
 "# 变量\n"
 
-#: variable.c:1706
+#: variable.c:1736
 msgid ""
 "\n"
 "# Pattern-specific Variable Values"
@@ -2076,7 +2039,7 @@ msgstr ""
 "\n"
 "# Pattern-specific 变量值"
 
-#: variable.c:1720
+#: variable.c:1750
 msgid ""
 "\n"
 "# No pattern-specific variable values."
@@ -2084,7 +2047,7 @@ msgstr ""
 "\n"
 "# 没有 pattern-specific 变量的值。"
 
-#: variable.c:1722
+#: variable.c:1752
 #, c-format
 msgid ""
 "\n"
@@ -2094,96 +2057,46 @@ msgstr ""
 "# %u 个 pattern-specific 变量的值"
 
 #: variable.h:224
-#, fuzzy, c-format
+#, c-format
 msgid "warning: undefined variable '%.*s'"
 msgstr "警告:未定义的变量“%.*s”"
 
 #: vmsfunctions.c:91
-#, fuzzy, c-format
-msgid "sys$search() failed with %d\n"
-msgstr "sys$search 失败并返回 %d\n"
-
-#: vmsjobs.c:72
 #, c-format
-msgid "Warning: Empty redirection\n"
-msgstr "警告:空的重定向\n"
-
-#: vmsjobs.c:183
-#, fuzzy, c-format
-msgid "internal error: '%s' command_state"
-msgstr "内部错误:“%s” command_state"
+msgid "sys$search() failed with %d\n"
+msgstr "sys$search() 失败并返回 %d\n"
 
-#: vmsjobs.c:290
+#: vmsjobs.c:242
 #, c-format
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
-msgstr "-警告, 你可能必须从 DCL 重新启用 CTRL-Y。\n"
-
-#: vmsjobs.c:455 vmsjobs.c:559
-#, c-format
-msgid "BUILTIN [%s][%s]\n"
-msgstr "BUILTIN [%s][%s]\n"
+msgstr "-警告, 你可能必须从 DCL 重新启用 CTRL-Y 处理。\n"
 
-#: vmsjobs.c:465
+#: vmsjobs.c:679
 #, c-format
 msgid "BUILTIN CD %s\n"
 msgstr "BUILTIN CD %s\n"
 
-#: vmsjobs.c:501
-#, fuzzy, c-format
-msgid "BUILTIN ECHO %s->%s\n"
-msgstr "BUILTIN CD %s\n"
-
-#: vmsjobs.c:505
-#, c-format
-msgid "Unknown builtin command '%s'\n"
-msgstr "未知的内置命令“%s”\n"
-
-#: vmsjobs.c:592
-#, c-format
-msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
-msgstr ""
-
-#: vmsjobs.c:643
-#, c-format
-msgid "Error, empty command\n"
-msgstr "错误,空命令\n"
-
-#: vmsjobs.c:674
+#: vmsjobs.c:1228
 #, c-format
-msgid "Redirected input from %s\n"
-msgstr "来自 %s 的重定向输入\n"
+msgid "DCL: %s\n"
+msgstr "DCL:%s\n"
 
-#: vmsjobs.c:681
+#: vmsjobs.c:1288
 #, c-format
-msgid "Redirected error to %s\n"
-msgstr "到 %s 的重定向错误输出\n"
-
-#: vmsjobs.c:690
-#, fuzzy, c-format
 msgid "Append output to %s\n"
-msgstr "到 %s 的重定向输出\n"
-
-#: vmsjobs.c:696
-#, c-format
-msgid "Redirected output to %s\n"
-msgstr "到 %s 的重定向输出\n"
+msgstr "将输出追加到 %s\n"
 
-#: vmsjobs.c:802
+#: vmsjobs.c:1313
 #, c-format
 msgid "Append %.*s and cleanup\n"
-msgstr ""
+msgstr "追加 %.*s 并清理\n"
 
-#: vmsjobs.c:809
+#: vmsjobs.c:1326
 #, c-format
 msgid "Executing %s instead\n"
 msgstr "执行 %s 作为替代\n"
 
-#: vmsjobs.c:915
-#, c-format
-msgid "Error spawning, %d\n"
-msgstr "错误产生,%d\n"
-
-#: vpath.c:583
+#: vpath.c:603
 msgid ""
 "\n"
 "# VPATH Search Paths\n"
@@ -2191,13 +2104,12 @@ msgstr ""
 "\n"
 "# VPATH 搜索路径\n"
 
-#: vpath.c:600
-#, fuzzy
+#: vpath.c:620
 msgid "# No 'vpath' search paths."
 msgstr "# 没有“vpath”搜索路径。"
 
-#: vpath.c:602
-#, fuzzy, c-format
+#: vpath.c:622
+#, c-format
 msgid ""
 "\n"
 "# %u 'vpath' search paths.\n"
@@ -2205,8 +2117,7 @@ msgstr ""
 "\n"
 "# %u “vpath”搜索路径。\n"
 
-#: vpath.c:605
-#, fuzzy
+#: vpath.c:625
 msgid ""
 "\n"
 "# No general ('VPATH' variable) search path."
@@ -2214,8 +2125,7 @@ msgstr ""
 "\n"
 "# 没有通用搜索路径(“VPATH”变量)。"
 
-#: vpath.c:611
-#, fuzzy
+#: vpath.c:631
 msgid ""
 "\n"
 "# General ('VPATH' variable) search path:\n"
@@ -2225,6 +2135,82 @@ msgstr ""
 "# 通用搜索路径(“VPATH”变量):\n"
 "# "
 
+#: w32/w32os.c:46
+#, c-format
+msgid "Jobserver slots limited to %d\n"
+msgstr "jobserver 槽位数限制为 %d\n"
+
+#: w32/w32os.c:62
+#, c-format
+msgid "creating jobserver semaphore: (Error %ld: %s)"
+msgstr "正创建 jobserver 信号量:(错误 %ld:%s)"
+
+#: w32/w32os.c:81
+#, c-format
+msgid ""
+"internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"
+msgstr "内部错误:无法打开 jobserver 信号量“%s”:(错误 %ld:%s)"
+
+#: w32/w32os.c:84
+#, c-format
+msgid "Jobserver client (semaphore %s)\n"
+msgstr "jobserver 客户端(信号量 %s)\n"
+
+#: w32/w32os.c:125
+#, c-format
+msgid "release jobserver semaphore: (Error %ld: %s)"
+msgstr "释放 jobserver 信号量:(错误 %ld:%s)"
+
+#: w32/w32os.c:192
+#, c-format
+msgid "semaphore or child process wait: (Error %ld: %s)"
+msgstr "信号量或子进程等待:(错误 %ld:%s)"
+
+#~ msgid "%s: recipe for target '%s' failed"
+#~ msgstr "%s: '%s' 的命令配方失败"
+
+#~ msgid "%s[%s] Error 0x%x%s"
+#~ msgstr "%s[%s] 错误 0x%x%s"
+
+#~ msgid "%s[%s] %s%s%s"
+#~ msgstr "%s[%s] %s%s%s"
+
+#~ msgid "dup jobserver"
+#~ msgstr "复制任务服务器"
+
+#~ msgid "Warning: Empty redirection\n"
+#~ msgstr "警告:空的重定向\n"
+
+#~ msgid "internal error: '%s' command_state"
+#~ msgstr "内部错误:“%s”command_state"
+
+#~ msgid "BUILTIN [%s][%s]\n"
+#~ msgstr "BUILTIN [%s][%s]\n"
+
+#~ msgid "BUILTIN ECHO %s->%s\n"
+#~ msgstr "BUILTIN ECHO %s->%s\n"
+
+#~ msgid "Unknown builtin command '%s'\n"
+#~ msgstr "未知的内置命令“%s”\n"
+
+#~ msgid "Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"
+#~ msgstr "内置命令在 .ONESHELL 内未知或不受支持:“%s”\n"
+
+#~ msgid "Error, empty command\n"
+#~ msgstr "错误,空命令\n"
+
+#~ msgid "Redirected input from %s\n"
+#~ msgstr "来自 %s 的重定向输入\n"
+
+#~ msgid "Redirected error to %s\n"
+#~ msgstr "到 %s 的重定向错误输出\n"
+
+#~ msgid "Redirected output to %s\n"
+#~ msgstr "到 %s 的重定向输出\n"
+
+#~ msgid "Error spawning, %d\n"
+#~ msgstr "错误产生,%d\n"
+
 #, fuzzy
 #~ msgid "#  Invalid value in 'update_status' member!"
 #~ msgstr "#  “update_status”成员中无效的值!"
diff --git a/posixos.c b/posixos.c
new file mode 100644 (file)
index 0000000..4a787e4
--- /dev/null
+++ b/posixos.c
@@ -0,0 +1,431 @@
+/* POSIX-based operating system interface for GNU Make.
+Copyright (C) 2016 Free Software Foundation, Inc.
+This file is part of GNU Make.
+
+GNU Make is free software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 3 of the License, or (at your option) any later
+version.
+
+GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "makeint.h"
+
+#include <stdio.h>
+
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+#if defined(HAVE_PSELECT) && defined(HAVE_SYS_SELECT_H)
+# include <sys/select.h>
+#endif
+
+#include "debug.h"
+#include "job.h"
+#include "os.h"
+
+#ifdef MAKE_JOBSERVER
+
+/* This section provides OS-specific functions to support the jobserver.  */
+
+/* These track the state of the jobserver pipe.  Passed to child instances.  */
+static int job_fds[2] = { -1, -1 };
+
+/* Used to signal read() that a SIGCHLD happened.  Always CLOEXEC.
+   If we use pselect() this will never be created and always -1.
+ */
+static int job_rfd = -1;
+
+/* Token written to the pipe (could be any character...)  */
+static char token = '+';
+
+static int
+make_job_rfd (void)
+{
+#ifdef HAVE_PSELECT
+  /* Pretend we succeeded.  */
+  return 0;
+#else
+  EINTRLOOP (job_rfd, dup (job_fds[0]));
+  if (job_rfd >= 0)
+    CLOSE_ON_EXEC (job_rfd);
+
+  return job_rfd;
+#endif
+}
+
+unsigned int
+jobserver_setup (int slots)
+{
+  int r;
+
+  EINTRLOOP (r, pipe (job_fds));
+  if (r < 0)
+    pfatal_with_name (_("creating jobs pipe"));
+
+  if (make_job_rfd () < 0)
+    pfatal_with_name (_("duping jobs pipe"));
+
+  while (slots--)
+    {
+      EINTRLOOP (r, write (job_fds[1], &token, 1));
+      if (r != 1)
+        pfatal_with_name (_("init jobserver pipe"));
+    }
+
+  return 1;
+}
+
+unsigned int
+jobserver_parse_auth (const char *auth)
+{
+  /* Given the command-line parameter, parse it.  */
+  if (sscanf (auth, "%d,%d", &job_fds[0], &job_fds[1]) != 2)
+    OS (fatal, NILF,
+        _("internal error: invalid --jobserver-auth string '%s'"), auth);
+
+  DB (DB_JOBS,
+      (_("Jobserver client (fds %d,%d)\n"), job_fds[0], job_fds[1]));
+
+#ifdef HAVE_FCNTL_H
+# define FD_OK(_f) (fcntl ((_f), F_GETFD) != -1)
+#else
+# define FD_OK(_f) 1
+#endif
+
+  /* Make sure our pipeline is valid, and (possibly) create a duplicate pipe,
+     that will be closed in the SIGCHLD handler.  If this fails with EBADF,
+     the parent has closed the pipe on us because it didn't think we were a
+     submake.  If so, warn and default to -j1.  */
+
+  if (!FD_OK (job_fds[0]) || !FD_OK (job_fds[1]) || make_job_rfd () < 0)
+    {
+      if (errno != EBADF)
+        pfatal_with_name (_("jobserver pipeline"));
+
+      job_fds[0] = job_fds[1] = -1;
+
+      return 0;
+    }
+
+  return 1;
+}
+
+char *
+jobserver_get_auth (void)
+{
+  char *auth = xmalloc ((INTSTR_LENGTH * 2) + 2);
+  sprintf (auth, "%d,%d", job_fds[0], job_fds[1]);
+  return auth;
+}
+
+unsigned int
+jobserver_enabled (void)
+{
+  return job_fds[0] >= 0;
+}
+
+void
+jobserver_clear (void)
+{
+  if (job_fds[0] >= 0)
+    close (job_fds[0]);
+  if (job_fds[1] >= 0)
+    close (job_fds[1]);
+  if (job_rfd >= 0)
+    close (job_rfd);
+
+  job_fds[0] = job_fds[1] = job_rfd = -1;
+}
+
+void
+jobserver_release (int is_fatal)
+{
+  int r;
+  EINTRLOOP (r, write (job_fds[1], &token, 1));
+  if (r != 1)
+    {
+      if (is_fatal)
+        pfatal_with_name (_("write jobserver"));
+      perror_with_name ("write", "");
+    }
+}
+
+unsigned int
+jobserver_acquire_all (void)
+{
+  unsigned int tokens = 0;
+
+  /* Close the write side, so the read() won't hang.  */
+  close (job_fds[1]);
+  job_fds[1] = -1;
+
+  while (1)
+    {
+      char intake;
+      int r;
+      EINTRLOOP (r, read (job_fds[0], &intake, 1));
+      if (r != 1)
+        return tokens;
+      ++tokens;
+    }
+}
+
+/* Prepare the jobserver to start a child process.  */
+void
+jobserver_pre_child (int recursive)
+{
+  /* If it's not a recursive make, avoid polutting the jobserver pipes.  */
+  if (!recursive && job_fds[0] >= 0)
+    {
+      CLOSE_ON_EXEC (job_fds[0]);
+      CLOSE_ON_EXEC (job_fds[1]);
+    }
+}
+
+void
+jobserver_post_child (int recursive)
+{
+#if defined(F_GETFD) && defined(F_SETFD)
+  if (!recursive && job_fds[0] >= 0)
+    {
+      unsigned int i;
+      for (i = 0; i < 2; ++i)
+        {
+          int flags;
+          EINTRLOOP (flags, fcntl (job_fds[i], F_GETFD));
+          if (flags >= 0)
+            {
+              int r;
+              EINTRLOOP (r, fcntl (job_fds[i], F_SETFD, flags & ~FD_CLOEXEC));
+            }
+        }
+    }
+#endif
+}
+
+void
+jobserver_signal (void)
+{
+  if (job_rfd >= 0)
+    {
+      close (job_rfd);
+      job_rfd = -1;
+    }
+}
+
+void
+jobserver_pre_acquire (void)
+{
+  /* Make sure we have a dup'd FD.  */
+  if (job_rfd < 0 && job_fds[0] >= 0 && make_job_rfd () < 0)
+    pfatal_with_name (_("duping jobs pipe"));
+}
+
+#ifdef HAVE_PSELECT
+
+/* Use pselect() to atomically wait for both a signal and a file descriptor.
+   It also provides a timeout facility so we don't need to use SIGALRM.
+
+   This method relies on the fact that SIGCHLD will be blocked everywhere,
+   and only unblocked (atomically) within the pselect() call, so we can
+   never miss a SIGCHLD.
+ */
+unsigned int
+jobserver_acquire (int timeout)
+{
+  sigset_t empty;
+  fd_set readfds;
+  struct timespec spec;
+  struct timespec *specp = NULL;
+  int r;
+  char intake;
+
+  sigemptyset (&empty);
+
+  FD_ZERO (&readfds);
+  FD_SET (job_fds[0], &readfds);
+
+  if (timeout)
+    {
+      /* Alarm after one second (is this too granular?)  */
+      spec.tv_sec = 1;
+      spec.tv_nsec = 0;
+      specp = &spec;
+    }
+
+  r = pselect (job_fds[0]+1, &readfds, NULL, NULL, specp, &empty);
+
+  if (r == -1)
+    {
+      /* Better be SIGCHLD.  */
+      if (errno != EINTR)
+        pfatal_with_name (_("pselect jobs pipe"));
+      return 0;
+    }
+
+  if (r == 0)
+    /* Timeout.  */
+    return 0;
+
+  /* The read FD is ready: read it!  */
+  EINTRLOOP (r, read (job_fds[0], &intake, 1));
+  if (r < 0)
+    pfatal_with_name (_("read jobs pipe"));
+
+  /* What does it mean if read() returns 0?  It shouldn't happen because only
+     the master make can reap all the tokens and close the write side...??  */
+  return r > 0;
+}
+
+#else
+
+/* This method uses a "traditional" UNIX model for waiting on both a signal
+   and a file descriptor.  However, it's complex and since we have a SIGCHLD
+   handler installed we need to check ALL system calls for EINTR: painful!
+
+   Read a token.  As long as there's no token available we'll block.  We
+   enable interruptible system calls before the read(2) so that if we get a
+   SIGCHLD while we're waiting, we'll return with EINTR and we can process the
+   death(s) and return tokens to the free pool.
+
+   Once we return from the read, we immediately reinstate restartable system
+   calls.  This allows us to not worry about checking for EINTR on all the
+   other system calls in the program.
+
+   There is one other twist: there is a span between the time reap_children()
+   does its last check for dead children and the time the read(2) call is
+   entered, below, where if a child dies we won't notice.  This is extremely
+   serious as it could cause us to deadlock, given the right set of events.
+
+   To avoid this, we do the following: before we reap_children(), we dup(2)
+   the read FD on the jobserver pipe.  The read(2) call below uses that new
+   FD.  In the signal handler, we close that FD.  That way, if a child dies
+   during the section mentioned above, the read(2) will be invoked with an
+   invalid FD and will return immediately with EBADF.  */
+
+static RETSIGTYPE
+job_noop (int sig UNUSED)
+{
+}
+
+/* Set the child handler action flags to FLAGS.  */
+static void
+set_child_handler_action_flags (int set_handler, int set_alarm)
+{
+  struct sigaction sa;
+
+#ifdef __EMX__
+  /* The child handler must be turned off here.  */
+  signal (SIGCHLD, SIG_DFL);
+#endif
+
+  memset (&sa, '\0', sizeof sa);
+  sa.sa_handler = child_handler;
+  sa.sa_flags = set_handler ? 0 : SA_RESTART;
+
+#if defined SIGCHLD
+  if (sigaction (SIGCHLD, &sa, NULL) < 0)
+    pfatal_with_name ("sigaction: SIGCHLD");
+#endif
+
+#if defined SIGCLD && SIGCLD != SIGCHLD
+  if (sigaction (SIGCLD, &sa, NULL) < 0)
+    pfatal_with_name ("sigaction: SIGCLD");
+#endif
+
+#if defined SIGALRM
+  if (set_alarm)
+    {
+      /* If we're about to enter the read(), set an alarm to wake up in a
+         second so we can check if the load has dropped and we can start more
+         work.  On the way out, turn off the alarm and set SIG_DFL.  */
+      if (set_handler)
+        {
+          sa.sa_handler = job_noop;
+          sa.sa_flags = 0;
+          if (sigaction (SIGALRM, &sa, NULL) < 0)
+            pfatal_with_name ("sigaction: SIGALRM");
+          alarm (1);
+        }
+      else
+        {
+          alarm (0);
+          sa.sa_handler = SIG_DFL;
+          sa.sa_flags = 0;
+          if (sigaction (SIGALRM, &sa, NULL) < 0)
+            pfatal_with_name ("sigaction: SIGALRM");
+        }
+    }
+#endif
+}
+
+unsigned int
+jobserver_acquire (int timeout)
+{
+  char intake;
+  int got_token;
+  int saved_errno;
+
+  /* Set interruptible system calls, and read() for a job token.  */
+  set_child_handler_action_flags (1, timeout);
+
+  EINTRLOOP (got_token, read (job_rfd, &intake, 1));
+  saved_errno = errno;
+
+  set_child_handler_action_flags (0, timeout);
+
+  if (got_token == 1)
+    return 1;
+
+  /* If the error _wasn't_ expected (EINTR or EBADF), fatal.  Otherwise,
+     go back and reap_children(), and try again.  */
+  errno = saved_errno;
+
+  if (errno != EINTR && errno != EBADF)
+    pfatal_with_name (_("read jobs pipe"));
+
+  if (errno == EBADF)
+    DB (DB_JOBS, ("Read returned EBADF.\n"));
+
+  return 0;
+}
+
+#endif
+
+#endif /* MAKE_JOBSERVER */
+
+/* Create a "bad" file descriptor for stdin when parallel jobs are run.  */
+int
+get_bad_stdin (void)
+{
+  static int bad_stdin = -1;
+
+  /* Set up a bad standard input that reads from a broken pipe.  */
+
+  if (bad_stdin == -1)
+    {
+      /* Make a file descriptor that is the read end of a broken pipe.
+         This will be used for some children's standard inputs.  */
+      int pd[2];
+      if (pipe (pd) == 0)
+        {
+          /* Close the write side.  */
+          (void) close (pd[1]);
+          /* Save the read side.  */
+          bad_stdin = pd[0];
+
+          /* Set the descriptor to close on exec, so it does not litter any
+             child's descriptor table.  When it is dup2'd onto descriptor 0,
+             that descriptor will not close on exec.  */
+          CLOSE_ON_EXEC (bad_stdin);
+        }
+    }
+
+  return bad_stdin;
+}
diff --git a/read.c b/read.c
index 6ff4bcc..b870aa8 100644 (file)
--- a/read.c
+++ b/read.c
@@ -1,5 +1,5 @@
 /* Reading and parsing of makefiles for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -18,8 +18,6 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <assert.h>
 
-#include <glob.h>
-
 #include "filedef.h"
 #include "dep.h"
 #include "job.h"
@@ -54,7 +52,7 @@ struct ebuffer
     char *bufstart;     /* Start of the entire buffer.  */
     unsigned int size;  /* Malloc'd size of buffer. */
     FILE *fp;           /* File, or NULL if this is an internal buffer.  */
-    gmk_floc floc;   /* Info on the file in fp (if any).  */
+    floc floc;          /* Info on the file in fp (if any).  */
   };
 
 /* Track the modifiers we can have on variable assignments */
@@ -128,13 +126,13 @@ static unsigned int max_incl_len;
 /* The filename and pointer to line number of the
    makefile currently being read in.  */
 
-const gmk_floc *reading_file = 0;
+const floc *reading_file = 0;
 
 /* The chain of files read by read_all_makefiles.  */
 
-static struct dep *read_files = 0;
+static struct goaldep *read_files = 0;
 
-static int eval_makefile (const char *filename, int flags);
+static struct goaldep *eval_makefile (const char *filename, int flags);
 static void eval (struct ebuffer *buffer, int flags);
 
 static long readline (struct ebuffer *ebuf);
@@ -142,16 +140,16 @@ static void do_undefine (char *name, enum variable_origin origin,
                          struct ebuffer *ebuf);
 static struct variable *do_define (char *name, enum variable_origin origin,
                                    struct ebuffer *ebuf);
-static int conditional_line (char *line, int len, const gmk_floc *flocp);
+static int conditional_line (char *line, int len, const floc *flocp);
 static void record_files (struct nameseq *filenames, const char *pattern,
                           const char *pattern_percent, char *depstr,
                           unsigned int cmds_started, char *commands,
                           unsigned int commands_idx, int two_colon,
-                          char prefix, const gmk_floc *flocp);
+                          char prefix, const floc *flocp);
 static void record_target_var (struct nameseq *filenames, char *defn,
                                enum variable_origin origin,
                                struct vmodifiers *vmod,
-                               const gmk_floc *flocp);
+                               const floc *flocp);
 static enum make_word_type get_next_mword (char *buffer, char *delim,
                                            char **startp, unsigned int *length);
 static void remove_comments (char *line);
@@ -167,7 +165,7 @@ static char *unescape_char (char *string, int c);
 \f
 /* Read in all the makefiles and return a chain of targets to rebuild.  */
 
-struct dep *
+struct goaldep *
 read_all_makefiles (const char **makefiles)
 {
   unsigned int num_makefiles = 0;
@@ -217,17 +215,11 @@ read_all_makefiles (const char **makefiles)
   if (makefiles != 0)
     while (*makefiles != 0)
       {
-        struct dep *tail = read_files;
-        struct dep *d;
+        struct goaldep *d = eval_makefile (*makefiles, 0);
 
-        if (! eval_makefile (*makefiles, 0))
+        if (errno)
           perror_with_name ("", *makefiles);
 
-        /* Find the first element eval_makefile() added to read_files.  */
-        d = read_files;
-        while (d->next != tail)
-          d = d->next;
-
         /* Reuse the storage allocated for the read_file.  */
         *makefiles = dep_name (d);
         ++num_makefiles;
@@ -241,7 +233,8 @@ read_all_makefiles (const char **makefiles)
       static const char *default_makefiles[] =
 #ifdef VMS
         /* all lower case since readdir() (the vms version) 'lowercasifies' */
-        { "makefile.vms", "gnumakefile.", "makefile.", 0 };
+        /* TODO: Above is not always true, this needs more work */
+        { "makefile.vms", "gnumakefile", "makefile", 0 };
 #else
 #ifdef _AMIGA
         { "GNUmakefile", "Makefile", "SMakefile", 0 };
@@ -259,25 +252,25 @@ read_all_makefiles (const char **makefiles)
 
       if (*p != 0)
         {
-          if (! eval_makefile (*p, 0))
+          eval_makefile (*p, 0);
+          if (errno)
             perror_with_name ("", *p);
         }
       else
         {
           /* No default makefile was found.  Add the default makefiles to the
              'read_files' chain so they will be updated if possible.  */
-          struct dep *tail = read_files;
+          struct goaldep *tail = read_files;
           /* Add them to the tail, after any MAKEFILES variable makefiles.  */
           while (tail != 0 && tail->next != 0)
             tail = tail->next;
           for (p = default_makefiles; *p != 0; ++p)
             {
-              struct dep *d = alloc_dep ();
+              struct goaldep *d = alloc_goaldep ();
               d->file = enter_file (strcache_add (*p));
-              d->dontcare = 1;
               /* Tell update_goal_chain to bail out as soon as this file is
                  made, and main not to die if we can't make this file.  */
-              d->changed = RM_DONTCARE;
+              d->flags = RM_DONTCARE;
               if (tail == 0)
                 read_files = d;
               else
@@ -318,17 +311,18 @@ restore_conditionals (struct conditionals *saved)
   conditionals = saved;
 }
 \f
-static int
+static struct goaldep *
 eval_makefile (const char *filename, int flags)
 {
-  struct dep *deps;
+  struct goaldep *deps;
   struct ebuffer ebuf;
-  const gmk_floc *curfile;
+  const floc *curfile;
   char *expanded = 0;
   int makefile_errno;
 
   ebuf.floc.filenm = filename; /* Use the original file name.  */
   ebuf.floc.lineno = 1;
+  ebuf.floc.offset = 0;
 
   if (ISDB (DB_VERBOSE))
     {
@@ -400,16 +394,14 @@ eval_makefile (const char *filename, int flags)
   filename = strcache_add (filename);
 
   /* Add FILENAME to the chain of read makefiles.  */
-  deps = alloc_dep ();
+  deps = alloc_goaldep ();
   deps->next = read_files;
   read_files = deps;
   deps->file = lookup_file (filename);
   if (deps->file == 0)
     deps->file = enter_file (filename);
   filename = deps->file->name;
-  deps->changed = flags;
-  if (flags & RM_DONTCARE)
-    deps->dontcare = 1;
+  deps->flags = flags;
 
   free (expanded);
 
@@ -418,10 +410,10 @@ eval_makefile (const char *filename, int flags)
   if (ebuf.fp == 0)
     {
       /* If we did some searching, errno has the error from the last
-         attempt, rather from FILENAME itself.  Restore it in case the
+         attempt, rather from FILENAME itself.  Store it in case the
          caller wants to use it in a message.  */
       errno = makefile_errno;
-      return 0;
+      return deps;
     }
 
   /* Set close-on-exec to avoid leaking the makefile to children, such as
@@ -451,16 +443,17 @@ eval_makefile (const char *filename, int flags)
   free (ebuf.bufstart);
   alloca (0);
 
-  return 1;
+  errno = 0;
+  return deps;
 }
 
 void
-eval_buffer (char *buffer, const gmk_floc *floc)
+eval_buffer (char *buffer, const floc *flocp)
 {
   struct ebuffer ebuf;
   struct conditionals *saved;
   struct conditionals new;
-  const gmk_floc *curfile;
+  const floc *curfile;
 
   /* Evaluate the buffer */
 
@@ -468,14 +461,15 @@ eval_buffer (char *buffer, const gmk_floc *floc)
   ebuf.buffer = ebuf.bufnext = ebuf.bufstart = buffer;
   ebuf.fp = NULL;
 
-  if (floc)
-    ebuf.floc = *floc;
+  if (flocp)
+    ebuf.floc = *flocp;
   else if (reading_file)
     ebuf.floc = *reading_file;
   else
     {
       ebuf.floc.filenm = NULL;
       ebuf.floc.lineno = 1;
+      ebuf.floc.offset = 0;
     }
 
   curfile = reading_file;
@@ -510,7 +504,7 @@ parse_var_assignment (const char *line, struct vmodifiers *vmod)
   memset (vmod, '\0', sizeof (*vmod));
 
   /* Find the start of the next token.  If there isn't one we're done.  */
-  line = next_token (line);
+  NEXT_TOKEN (line);
   if (*line == '\0')
     return (char *)line;
 
@@ -589,8 +583,8 @@ eval (struct ebuffer *ebuf, int set_default)
   char prefix = cmd_prefix;
   const char *pattern = 0;
   const char *pattern_percent;
-  gmk_floc *fstart;
-  gmk_floc fi;
+  floc *fstart;
+  floc fi;
 
 #define record_waiting_files()                                                \
   do                                                                          \
@@ -598,6 +592,7 @@ eval (struct ebuffer *ebuf, int set_default)
       if (filenames != 0)                                                     \
         {                                                                     \
           fi.lineno = tgts_started;                                           \
+          fi.offset = 0;                                                      \
           record_files (filenames, pattern, pattern_percent, depstr,          \
                         cmds_started, commands, commands_idx, two_colon,      \
                         prefix, &fi);                                         \
@@ -719,8 +714,7 @@ eval (struct ebuffer *ebuf, int set_default)
 
       /* Get rid if starting space (including formfeed, vtab, etc.)  */
       p = collapsed;
-      while (isspace ((unsigned char)*p))
-        ++p;
+      NEXT_TOKEN (p);
 
       /* See if this is a variable assignment.  We need to do this early, to
          allow variables with names like 'ifdef', 'export', 'private', etc.  */
@@ -730,9 +724,6 @@ eval (struct ebuffer *ebuf, int set_default)
           struct variable *v;
           enum variable_origin origin = vmod.override_v ? o_override : o_file;
 
-          /* Variable assignment ends the previous rule.  */
-          record_waiting_files ();
-
           /* If we're ignoring then we're done now.  */
           if (ignoring)
             {
@@ -741,6 +732,9 @@ eval (struct ebuffer *ebuf, int set_default)
               continue;
             }
 
+          /* Variable assignment ends the previous rule.  */
+          record_waiting_files ();
+
           if (vmod.undefine_v)
           {
             do_undefine (p, origin, ebuf);
@@ -768,7 +762,7 @@ eval (struct ebuffer *ebuf, int set_default)
 
       p2 = end_of_token (p);
       wlen = p2 - p;
-      p2 = next_token (p2);
+      NEXT_TOKEN (p2);
 
       /* If we're in an ignored define, skip this line (but maybe get out).  */
       if (in_ignored_define)
@@ -903,21 +897,20 @@ eval (struct ebuffer *ebuf, int set_default)
           while (files != 0)
             {
               struct nameseq *next = files->next;
-              const char *name = files->name;
-              int r;
+              int flags = (RM_INCLUDED | RM_NO_TILDE
+                           | (noerror ? RM_DONTCARE : 0)
+                           | (set_default ? 0 : RM_NO_DEFAULT_GOAL));
 
-              free_ns (files);
-              files = next;
+              struct goaldep *d = eval_makefile (files->name, flags);
 
-              r = eval_makefile (name,
-                                 (RM_INCLUDED | RM_NO_TILDE
-                                  | (noerror ? RM_DONTCARE : 0)
-                                  | (set_default ? 0 : RM_NO_DEFAULT_GOAL)));
-              if (!r && !noerror)
+              if (errno)
                 {
-                  const char *err = strerror (errno);
-                  OSS (error, fstart, "%s: %s", name, err);
+                  d->error = (unsigned short)errno;
+                  d->floc = *fstart;
                 }
+
+              free_ns (files);
+              files = next;
             }
 
           /* Restore conditional state.  */
@@ -957,7 +950,7 @@ eval (struct ebuffer *ebuf, int set_default)
             {
               struct nameseq *next = files->next;
               const char *name = files->name;
-              struct dep *deps;
+              struct goaldep *deps;
               int r;
 
               /* Load the file.  0 means failure.  */
@@ -973,7 +966,7 @@ eval (struct ebuffer *ebuf, int set_default)
                 continue;
 
               /* It succeeded, so add it to the list "to be rebuilt".  */
-              deps = alloc_dep ();
+              deps = alloc_goaldep ();
               deps->next = read_files;
               read_files = deps;
               deps->file = lookup_file (name);
@@ -1241,8 +1234,7 @@ eval (struct ebuffer *ebuf, int set_default)
            The rule is that it's only a target, if there are TWO :'s
            OR a space around the :.
         */
-        if (p && !(isspace ((unsigned char)p[1]) || !p[1]
-                   || isspace ((unsigned char)p[-1])))
+        if (p && !(ISSPACE (p[1]) || !p[1] || ISSPACE (p[-1])))
           p = 0;
 #endif
 #ifdef HAVE_DOS_PATHS
@@ -1435,7 +1427,7 @@ do_undefine (char *name, enum variable_origin origin, struct ebuffer *ebuf)
   if (*name == '\0')
     O (fatal, &ebuf->floc, _("empty variable name"));
   p = name + strlen (name) - 1;
-  while (p > name && isblank ((unsigned char)*p))
+  while (p > name && ISBLANK (*p))
     --p;
   p[1] = '\0';
 
@@ -1452,7 +1444,7 @@ do_define (char *name, enum variable_origin origin, struct ebuffer *ebuf)
 {
   struct variable *v;
   struct variable var;
-  gmk_floc defstart;
+  floc defstart;
   int nlevels = 1;
   unsigned int length = 100;
   char *definition = xmalloc (length);
@@ -1480,7 +1472,7 @@ do_define (char *name, enum variable_origin origin, struct ebuffer *ebuf)
   if (name[0] == '\0')
     O (fatal, &defstart, _("empty variable name"));
   p = name + strlen (name) - 1;
-  while (p > name && isblank ((unsigned char)*p))
+  while (p > name && ISBLANK (*p))
     --p;
   p[1] = '\0';
 
@@ -1508,13 +1500,13 @@ do_define (char *name, enum variable_origin origin, struct ebuffer *ebuf)
           len = strlen (p);
 
           /* If this is another 'define', increment the level count.  */
-          if ((len == 6 || (len > 6 && isblank ((unsigned char)p[6])))
+          if ((len == 6 || (len > 6 && ISBLANK (p[6])))
               && strneq (p, "define", 6))
             ++nlevels;
 
           /* If this is an 'endef', decrement the count.  If it's now 0,
              we've found the last one.  */
-          else if ((len == 5 || (len > 5 && isblank ((unsigned char)p[5])))
+          else if ((len == 5 || (len > 5 && ISBLANK (p[5])))
                    && strneq (p, "endef", 5))
             {
               p += 5;
@@ -1568,7 +1560,7 @@ do_define (char *name, enum variable_origin origin, struct ebuffer *ebuf)
    1 if following text should be ignored.  */
 
 static int
-conditional_line (char *line, int len, const gmk_floc *flocp)
+conditional_line (char *line, int len, const floc *flocp)
 {
   const char *cmdname;
   enum { c_ifdef, c_ifndef, c_ifeq, c_ifneq, c_else, c_endif } cmdtype;
@@ -1590,7 +1582,8 @@ conditional_line (char *line, int len, const gmk_floc *flocp)
     return -2;
 
   /* Found one: skip past it and any whitespace after it.  */
-  line = next_token (line + len);
+  line += len;
+  NEXT_TOKEN (line);
 
 #define EXTRATEXT() OS (error, flocp, _("extraneous text after '%s' directive"), cmdname)
 #define EXTRACMD()  OS (fatal, flocp, _("extraneous '%s'"), cmdname)
@@ -1711,7 +1704,7 @@ conditional_line (char *line, int len, const gmk_floc *flocp)
       /* Make sure there's only one variable name to test.  */
       p = end_of_token (var);
       i = p - var;
-      p = next_token (p);
+      NEXT_TOKEN (p);
       if (*p != '\0')
         return -1;
 
@@ -1757,7 +1750,7 @@ conditional_line (char *line, int len, const gmk_floc *flocp)
         {
           /* Strip blanks after the first string.  */
           char *p = line++;
-          while (isblank ((unsigned char)p[-1]))
+          while (ISBLANK (p[-1]))
             --p;
           *p = '\0';
         }
@@ -1773,7 +1766,7 @@ conditional_line (char *line, int len, const gmk_floc *flocp)
 
       if (termin != ',')
         /* Find the start of the second string.  */
-        line = next_token (line);
+        NEXT_TOKEN (line);
 
       termin = termin == ',' ? ')' : *line;
       if (termin != ')' && termin != '"' && termin != '\'')
@@ -1808,8 +1801,8 @@ conditional_line (char *line, int len, const gmk_floc *flocp)
       if (*line == '\0')
         return -1;
 
-      *line = '\0';
-      line = next_token (++line);
+      *(line++) = '\0';
+      NEXT_TOKEN (line);
       if (*line != '\0')
         EXTRATEXT ();
 
@@ -1838,7 +1831,7 @@ conditional_line (char *line, int len, const gmk_floc *flocp)
 static void
 record_target_var (struct nameseq *filenames, char *defn,
                    enum variable_origin origin, struct vmodifiers *vmod,
-                   const gmk_floc *flocp)
+                   const floc *flocp)
 {
   struct nameseq *nextf;
   struct variable_set_list *global;
@@ -1942,7 +1935,7 @@ record_files (struct nameseq *filenames, const char *pattern,
               const char *pattern_percent, char *depstr,
               unsigned int cmds_started, char *commands,
               unsigned int commands_idx, int two_colon,
-              char prefix, const gmk_floc *flocp)
+              char prefix, const floc *flocp)
 {
   struct commands *cmds;
   struct dep *deps;
@@ -1966,6 +1959,7 @@ record_files (struct nameseq *filenames, const char *pattern,
       cmds = xmalloc (sizeof (struct commands));
       cmds->fileinfo.filenm = flocp->filenm;
       cmds->fileinfo.lineno = cmds_started;
+      cmds->fileinfo.offset = 0;
       cmds->commands = xstrndup (commands, commands_idx);
       cmds->command_lines = 0;
       cmds->recipe_prefix = prefix;
@@ -2261,6 +2255,10 @@ find_char_unquote (char *string, int map)
         {
           char openparen = p[1];
 
+          /* Check if '$' is the last character in the string.  */
+          if (openparen == '\0')
+            break;
+
           p += 2;
 
           /* Skip the contents of a non-quoted, multi-char variable ref.  */
@@ -2342,6 +2340,10 @@ unescape_char (char *string, int c)
               /* It's not; just take it all without unescaping.  */
               memmove (p, s, l);
               p += l;
+
+              // If we hit the end of the string, we're done
+              if (*e == '\0')
+                break;
             }
           else if (l > 1)
             {
@@ -2350,6 +2352,7 @@ unescape_char (char *string, int c)
               memmove (p, s, l);
               p += l;
             }
+
           s = e;
         }
 
@@ -2457,7 +2460,7 @@ find_percent_cached (const char **string)
    Since we aren't really reading from a file, don't bother with linenumbers.
  */
 
-static unsigned long
+static long
 readstring (struct ebuffer *ebuf)
 {
   char *eol;
@@ -2631,7 +2634,7 @@ get_next_mword (char *buffer, char *delim, char **startp, unsigned int *length)
   char c;
 
   /* Skip any leading whitespace.  */
-  while (isblank ((unsigned char)*p))
+  while (ISBLANK (*p))
     ++p;
 
   beg = p;
@@ -2729,6 +2732,8 @@ get_next_mword (char *buffer, char *delim, char **startp, unsigned int *length)
           c = *(p++);
           if (c == '$')
             break;
+          if (c == '\0')
+            goto done_word;
 
           /* This is a variable reference, so note that it's expandable.
              Then read it to the matching close paren.  */
@@ -2913,7 +2918,6 @@ tilde_expand (const char *name)
 #ifndef VMS
   if (name[1] == '/' || name[1] == '\0')
     {
-      extern char *getenv ();
       char *home_dir;
       int is_variable;
 
@@ -2936,7 +2940,6 @@ tilde_expand (const char *name)
 # if !defined(_AMIGA) && !defined(WINDOWS32)
       if (home_dir == 0 || home_dir[0] == '\0')
         {
-          extern char *getlogin ();
           char *logname = getlogin ();
           home_dir = 0;
           if (logname != 0)
@@ -3005,8 +3008,6 @@ void *
 parse_file_seq (char **stringp, unsigned int size, int stopmap,
                 const char *prefix, int flags)
 {
-  extern void dir_setup_glob (glob_t *glob);
-
   /* tmp points to tmpbuf after the prefix, if any.
      tp is the end of the buffer. */
   static char *tmpbuf = NULL;
@@ -3064,7 +3065,7 @@ parse_file_seq (char **stringp, unsigned int size, int stopmap,
       int i;
 
       /* Skip whitespace; at the end of the string or STOPCHAR we're done.  */
-      p = next_token (p);
+      NEXT_TOKEN (p);
       if (STOP_SET (*p, stopmap))
         break;
 
@@ -3079,8 +3080,7 @@ parse_file_seq (char **stringp, unsigned int size, int stopmap,
 #endif
 #ifdef _AMIGA
       if (p && STOP_SET (*p, stopmap & MAP_COLON)
-          && !(isspace ((unsigned char)p[1]) || !p[1]
-               || isspace ((unsigned char)p[-1])))
+          && !(ISSPACE (p[1]) || !p[1] || ISSPACE (p[-1])))
         p = find_char_unquote (p+1, stopmap|MAP_VMSCOMMA|MAP_BLANK);
 #endif
 #ifdef HAVE_DOS_PATHS
@@ -3089,7 +3089,7 @@ parse_file_seq (char **stringp, unsigned int size, int stopmap,
        Note that tokens separated by spaces should be treated as separate
        tokens since make doesn't allow path names with spaces */
     if (stopmap | MAP_COLON)
-      while (p != 0 && !isspace ((unsigned char)*p) &&
+      while (p != 0 && !ISSPACE (*p) &&
              (p[1] == '\\' || p[1] == '/') && isalpha ((unsigned char)p[-1]))
         p = find_char_unquote (p + 1, stopmap|MAP_VMSCOMMA|MAP_BLANK);
 #endif
@@ -3099,12 +3099,15 @@ parse_file_seq (char **stringp, unsigned int size, int stopmap,
       /* Strip leading "this directory" references.  */
       if (NONE_SET (flags, PARSEFS_NOSTRIP))
 #ifdef VMS
-        /* Skip leading '[]'s.  */
-        while (p - s > 2 && s[0] == '[' && s[1] == ']')
-#else
+        /* Skip leading '[]'s. should only be one set or bug somwhere else */
+        if (p - s > 2 && s[0] == '[' && s[1] == ']')
+            s += 2;
+        /* Skip leading '<>'s. should only be one set or bug somwhere else */
+        if (p - s > 2 && s[0] == '<' && s[1] == '>')
+            s += 2;
+#endif
         /* Skip leading './'s.  */
         while (p - s > 2 && s[0] == '.' && s[1] == '/')
-#endif
           {
             /* Skip "./" and all following slashes.  */
             s += 2;
@@ -3118,9 +3121,7 @@ parse_file_seq (char **stringp, unsigned int size, int stopmap,
       if (s == p)
         {
         /* The name was stripped to empty ("./"). */
-#if defined(VMS)
-          continue;
-#elif defined(_AMIGA)
+#if defined(_AMIGA)
           /* PDS-- This cannot be right!! */
           tp[0] = '\0';
           nlen = 0;
@@ -3183,7 +3184,7 @@ parse_file_seq (char **stringp, unsigned int size, int stopmap,
               do
                 {
                   const char *o = e;
-                  e = next_token (e);
+                  NEXT_TOKEN (e);
                   /* Find the end of this word.  We don't want to unquote and
                      we don't care about quoting since we're looking for the
                      last char in the word. */
index 299a2aa..df1a9e0 100644 (file)
--- a/remake.c
+++ b/remake.c
@@ -1,5 +1,5 @@
 /* Basic dependency engine for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -37,8 +37,6 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <io.h>
 #endif
 
-extern int try_implicit_rule (struct file *file, unsigned int depth);
-
 
 /* The test for circular dependencies is based on the 'updating' bit in
    'struct file'.  However, double colon targets have separate 'struct
@@ -55,6 +53,10 @@ extern int try_implicit_rule (struct file *file, unsigned int depth);
 /* Incremented when a command is started (under -n, when one would be).  */
 unsigned int commands_started = 0;
 
+/* Set to the goal dependency.  Mostly needed for remaking makefiles.  */
+static struct goaldep *goal_list;
+static struct dep *goal_dep;
+
 /* Current value for pruning the scan of the goal chain (toggle 0/1).  */
 static unsigned int considered;
 
@@ -77,32 +79,23 @@ static const char *library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr);
    one goal whose 'changed' member is nonzero is successfully made.  */
 
 enum update_status
-update_goal_chain (struct dep *goals)
+update_goal_chain (struct goaldep *goaldeps)
 {
   int t = touch_flag, q = question_flag, n = just_print_flag;
   enum update_status status = us_none;
 
-#define MTIME(file) (rebuilding_makefiles ? file_mtime_no_search (file) \
-                     : file_mtime (file))
-
   /* Duplicate the chain so we can remove things from it.  */
 
-  goals = copy_dep_chain (goals);
+  struct dep *goals = copy_dep_chain ((struct dep *)goaldeps);
 
-  {
-    /* Clear the 'changed' flag of each goal in the chain.
-       We will use the flag below to notice when any commands
-       have actually been run for a target.  When no commands
-       have been run, we give an "up to date" diagnostic.  */
-
-    struct dep *g;
-    for (g = goals; g != 0; g = g->next)
-      g->changed = 0;
-  }
+  goal_list = rebuilding_makefiles ? goaldeps : NULL;
 
   /* All files start with the considered bit 0, so the global value is 1.  */
   considered = 1;
 
+#define MTIME(file) (rebuilding_makefiles ? file_mtime_no_search (file) \
+                     : file_mtime (file))
+
   /* Update all the goals until they are all finished.  */
 
   while (goals != 0)
@@ -125,6 +118,8 @@ update_goal_chain (struct dep *goals)
           struct file *file;
           int stop = 0, any_not_updated = 0;
 
+          goal_dep = g;
+
           for (file = g->file->double_colon ? g->file->double_colon : g->file;
                file != NULL;
                file = file->prev)
@@ -132,7 +127,7 @@ update_goal_chain (struct dep *goals)
               unsigned int ocommands_started;
               enum update_status fail;
 
-              file->dontcare = g->dontcare;
+              file->dontcare = ANY_SET (g->flags, RM_DONTCARE);
 
               check_renamed (file);
               if (rebuilding_makefiles)
@@ -268,6 +263,30 @@ update_goal_chain (struct dep *goals)
   return status;
 }
 \f
+/* If we're rebuilding an included makefile that failed, and we care
+   about errors, show an error message the first time.  */
+
+void
+show_goal_error (void)
+{
+  struct goaldep *goal;
+
+  if ((goal_dep->flags & (RM_INCLUDED|RM_DONTCARE)) != RM_INCLUDED)
+    return;
+
+  for (goal = goal_list; goal; goal = goal->next)
+    if (goal_dep->file == goal->file)
+      {
+        if (goal->error)
+          {
+            OSS (error, &goal->floc, "%s: %s",
+                 goal->file->name, strerror ((int)goal->error));
+            goal->error = 0;
+          }
+        return;
+      }
+}
+\f
 /* If FILE is not up to date, execute the commands for it.
    Return 0 if successful, non-0 if unsuccessful;
    but with some flag settings, just call 'exit' if unsuccessful.
@@ -301,7 +320,7 @@ update_file (struct file *file, unsigned int depth)
             && !f->dontcare && f->no_diag))
         {
           DBF (DB_VERBOSE, _("Pruning file '%s'.\n"));
-          return f->command_state == cs_finished ? f->update_status : 0;
+          return f->command_state == cs_finished ? f->update_status : us_success;
         }
     }
 
@@ -325,12 +344,9 @@ update_file (struct file *file, unsigned int depth)
 
       if (f->command_state == cs_running
           || f->command_state == cs_deps_running)
-        {
-          /* Don't run the other :: rules for this
-             file until this rule is finished.  */
-          status = us_success;
-          break;
-        }
+        /* Don't run other :: rules for this target until
+           this rule is finished.  */
+        return us_success;
 
       if (new > status)
         status = new;
@@ -349,7 +365,7 @@ update_file (struct file *file, unsigned int depth)
           {
             enum update_status new = update_file (d->file, depth + 1);
             if (new > status)
-              new = status;
+              status = new;
           }
       }
 
@@ -380,29 +396,28 @@ complain (struct file *file)
 
   if (d == 0)
     {
+      show_goal_error ();
+
       /* Didn't find any dependencies to complain about. */
       if (file->parent)
         {
           size_t l = strlen (file->name) + strlen (file->parent->name) + 4;
+          const char *m = _("%sNo rule to make target '%s', needed by '%s'%s");
 
           if (!keep_going_flag)
-            fatal (NILF, l,
-                   _("%sNo rule to make target '%s', needed by '%s'%s"),
-                   "", file->name, file->parent->name, "");
+            fatal (NILF, l, m, "", file->name, file->parent->name, "");
 
-          error (NILF, l, _("%sNo rule to make target '%s', needed by '%s'%s"),
-                 "*** ", file->name, file->parent->name, ".");
+          error (NILF, l, m, "*** ", file->name, file->parent->name, ".");
         }
       else
         {
           size_t l = strlen (file->name) + 4;
+          const char *m = _("%sNo rule to make target '%s'%s");
 
           if (!keep_going_flag)
-            fatal (NILF, l,
-                   _("%sNo rule to make target '%s'%s"), "", file->name, "");
+            fatal (NILF, l, m, "", file->name, "");
 
-          error (NILF, l,
-                 _("%sNo rule to make target '%s'%s"), "*** ", file->name, ".");
+          error (NILF, l, m, "*** ", file->name, ".");
         }
 
       file->no_diag = 0;
@@ -1158,8 +1173,9 @@ touch_file (struct file *file)
   else
 #endif
     {
-      int fd = open (file->name, O_RDWR | O_CREAT, 0666);
+      int fd;
 
+      EINTRLOOP (fd, open (file->name, O_RDWR | O_CREAT, 0666));
       if (fd < 0)
         TOUCH_ERROR ("touch: open: ");
       else
@@ -1172,18 +1188,24 @@ touch_file (struct file *file)
           if (e < 0)
             TOUCH_ERROR ("touch: fstat: ");
           /* Rewrite character 0 same as it already is.  */
-          if (read (fd, &buf, 1) < 0)
+          EINTRLOOP (e, read (fd, &buf, 1));
+          if (e < 0)
             TOUCH_ERROR ("touch: read: ");
-          if (lseek (fd, 0L, 0) < 0L)
-            TOUCH_ERROR ("touch: lseek: ");
-          if (write (fd, &buf, 1) < 0)
+          {
+            off_t o;
+            EINTRLOOP (o, lseek (fd, 0L, 0));
+            if (o < 0L)
+              TOUCH_ERROR ("touch: lseek: ");
+          }
+          EINTRLOOP (e, write (fd, &buf, 1));
+          if (e < 0)
             TOUCH_ERROR ("touch: write: ");
-          /* If file length was 0, we just
-             changed it, so change it back.  */
+
+          /* If file length was 0, we just changed it, so change it back.  */
           if (statbuf.st_size == 0)
             {
               (void) close (fd);
-              fd = open (file->name, O_RDWR | O_TRUNC, 0666);
+              EINTRLOOP (fd, open (file->name, O_RDWR | O_TRUNC, 0666));
               if (fd < 0)
                 TOUCH_ERROR ("touch: open: ");
             }
@@ -1249,6 +1271,7 @@ FILE_TIMESTAMP
 f_mtime (struct file *file, int search)
 {
   FILE_TIMESTAMP mtime;
+  int propagate_timestamp;
 
   /* File's mtime is not known; must get it from the system.  */
 
@@ -1325,6 +1348,8 @@ f_mtime (struct file *file, int search)
               || (file->name[0] == '-' && file->name[1] == 'l'
                   && (name = library_search (file->name, &mtime)) != 0))
             {
+              int name_len;
+
               if (mtime != UNKNOWN_MTIME)
                 /* vpath_search and library_search store UNKNOWN_MTIME
                    if they didn't need to do a stat call for their work.  */
@@ -1333,7 +1358,14 @@ f_mtime (struct file *file, int search)
               /* If we found it in VPATH, see if it's in GPATH too; if so,
                  change the name right now; if not, defer until after the
                  dependencies are updated. */
-              if (gpath_search (name, strlen (name) - strlen (file->name) - 1))
+#ifndef VMS
+              name_len = strlen (name) - strlen (file->name) - 1;
+#else
+              name_len = strlen (name) - strlen (file->name);
+              if (name[name_len - 1] == '/')
+                  name_len--;
+#endif
+              if (gpath_search (name, name_len))
                 {
                   rename_file (file, name);
                   check_renamed (file);
@@ -1416,10 +1448,13 @@ f_mtime (struct file *file, int search)
         }
     }
 
-  /* Store the mtime into all the entries for this file.  */
+  /* Store the mtime into all the entries for this file for which it is safe
+     to do so: avoid propagating timestamps to double-colon rules that haven't
+     been examined so they're run or not based on the pre-update timestamp.  */
   if (file->double_colon)
     file = file->double_colon;
 
+  propagate_timestamp = file->updated;
   do
     {
       /* If this file is not implicit but it is intermediate then it was
@@ -1431,7 +1466,8 @@ f_mtime (struct file *file, int search)
           && !file->tried_implicit && file->intermediate)
         file->intermediate = 0;
 
-      file->last_mtime = mtime;
+      if (file->updated == propagate_timestamp)
+        file->last_mtime = mtime;
       file = file->prev;
     }
   while (file != 0);
index 867ee8d..7c36b9d 100644 (file)
@@ -3,7 +3,7 @@
    Please do not send bug reports or questions about it to
    the Make maintainers.
 
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -222,7 +222,7 @@ start_remote_job (char **argv, char **envp, int stdin_fd,
     fflush (stderr);
   }
 
-  pid = fork ();
+  pid = vfork ();
   if (pid < 0)
     {
       /* The fork failed!  */
index aeb335c..8e31a20 100644 (file)
@@ -1,5 +1,5 @@
 /* Template for the remote job exportation interface to GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
diff --git a/rule.c b/rule.c
index 9abf5b0..de8b304 100644 (file)
--- a/rule.c
+++ b/rule.c
@@ -1,5 +1,5 @@
 /* Pattern and suffix rule internals for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -380,6 +380,7 @@ install_pattern_rule (struct pspec *p, int terminal)
       r->cmds = xmalloc (sizeof (struct commands));
       r->cmds->fileinfo.filenm = 0;
       r->cmds->fileinfo.lineno = 0;
+      r->cmds->fileinfo.offset = 0;
       /* These will all be string literals, but we malloc space for them
          anyway because somebody might want to free them later.  */
       r->cmds->commands = xstrdup (p->commands);
diff --git a/rule.h b/rule.h
index df9fba2..9156b8e 100644 (file)
--- a/rule.h
+++ b/rule.h
@@ -1,5 +1,5 @@
 /* Definitions for using pattern rules in GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -55,3 +55,4 @@ void install_pattern_rule (struct pspec *p, int terminal);
 void create_pattern_rule (const char **targets, const char **target_percents,
                           unsigned int num, int terminal, struct dep *deps,
                           struct commands *commands, int override);
+void print_rule_data_base (void);
index 7db2439..55646e9 100644 (file)
--- a/signame.c
+++ b/signame.c
@@ -1,5 +1,5 @@
 /* Convert between signal names and numbers.
-Copyright (C) 1990-2014 Free Software Foundation, Inc.
+Copyright (C) 1990-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 1ade5e7..6dcf2bc 100644 (file)
@@ -1,5 +1,5 @@
 /* Constant string caching for GNU Make.
-Copyright (C) 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 2006-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -42,8 +42,8 @@ struct strcache {
 #define CACHE_BUFFER_ALLOC(_s)  ((_s) - (2 * sizeof (size_t)))
 #define CACHE_BUFFER_OFFSET     (offsetof (struct strcache, buffer))
 #define CACHE_BUFFER_SIZE(_s)   (CACHE_BUFFER_ALLOC(_s) - CACHE_BUFFER_OFFSET)
+#define BUFSIZE                 CACHE_BUFFER_SIZE (CACHE_BUFFER_BASE)
 
-static sc_buflen_t bufsize = CACHE_BUFFER_SIZE (CACHE_BUFFER_BASE);
 static struct strcache *strcache = NULL;
 static struct strcache *fullcache = NULL;
 
@@ -57,65 +57,76 @@ static unsigned long total_size = 0;
    that this doesn't seem to be much of an issue in practice.
  */
 static struct strcache *
-new_cache ()
+new_cache (struct strcache **head, sc_buflen_t buflen)
 {
-  struct strcache *new;
-  new = xmalloc (bufsize + CACHE_BUFFER_OFFSET);
+  struct strcache *new = xmalloc (buflen + CACHE_BUFFER_OFFSET);
   new->end = 0;
   new->count = 0;
-  new->bytesfree = bufsize;
+  new->bytesfree = buflen;
 
-  new->next = strcache;
-  strcache = new;
+  new->next = *head;
+  *head = new;
 
   ++total_buffers;
   return new;
 }
 
 static const char *
+copy_string (struct strcache *sp, const char *str, unsigned int len)
+{
+  /* Add the string to this cache.  */
+  char *res = &sp->buffer[sp->end];
+
+  memmove (res, str, len);
+  res[len++] = '\0';
+  sp->end += len;
+  sp->bytesfree -= len;
+  ++sp->count;
+
+  return res;
+}
+
+static const char *
 add_string (const char *str, unsigned int len)
 {
-  char *res;
+  const char *res;
   struct strcache *sp;
   struct strcache **spp = &strcache;
   /* We need space for the nul char.  */
   unsigned int sz = len + 1;
 
+  ++total_strings;
+  total_size += sz;
+
   /* If the string we want is too large to fit into a single buffer, then
-     no existing cache is large enough.  Change the maximum size.  */
-  if (sz > bufsize)
-    bufsize = CACHE_BUFFER_SIZE ((((sz + 1) / CACHE_BUFFER_BASE) + 1)
-                                 * CACHE_BUFFER_BASE);
-  else
-    /* Find the first cache with enough free space.  */
-    for (; *spp != NULL; spp = &(*spp)->next)
-      if ((*spp)->bytesfree > sz)
-        break;
-
-  /* If nothing is big enough, make a new cache.  */
+     no existing cache is large enough.  Add it directly to the fullcache.  */
+  if (sz > BUFSIZE)
+    {
+      sp = new_cache (&fullcache, sz);
+      return copy_string (sp, str, len);
+    }
+
+  /* Find the first cache with enough free space.  */
+  for (; *spp != NULL; spp = &(*spp)->next)
+    if ((*spp)->bytesfree > sz)
+      break;
   sp = *spp;
+
+  /* If nothing is big enough, make a new cache at the front.  */
   if (sp == NULL)
     {
-      sp = new_cache ();
-      spp = &sp;
+      sp = new_cache (&strcache, BUFSIZE);
+      spp = &strcache;
     }
 
   /* Add the string to this cache.  */
-  res = &sp->buffer[sp->end];
-  memmove (res, str, len);
-  res[len] = '\0';
-  sp->end += sz;
-  sp->bytesfree -= sz;
-  ++sp->count;
+  res = copy_string (sp, str, len);
 
   /* If the amount free in this cache is less than the average string size,
      consider it full and move it to the full list.  */
-  ++total_strings;
-  total_size += sz;
-
-  if (sp->bytesfree < (total_size / total_strings) + 1)
+  if (total_strings > 20 && sp->bytesfree < (total_size / total_strings) + 1)
     {
-      *spp = (*spp)->next;
+      *spp = sp->next;
       sp->next = fullcache;
       fullcache = sp;
     }
@@ -123,6 +134,26 @@ add_string (const char *str, unsigned int len)
   return res;
 }
 
+/* For strings too large for the strcache, we just save them in a list.  */
+struct hugestring {
+  struct hugestring *next;  /* The next string.  */
+  char buffer[1];           /* The string.  */
+};
+
+static struct hugestring *hugestrings = NULL;
+
+static const char *
+add_hugestring (const char *str, unsigned int len)
+{
+  struct hugestring *new = xmalloc (sizeof (struct hugestring) + len);
+  memcpy (new->buffer, str, len);
+  new->buffer[len] = '\0';
+
+  new->next = hugestrings;
+  hugestrings = new;
+
+  return new->buffer;
+}
 
 /* Hash table of strings in the cache.  */
 
@@ -148,11 +179,19 @@ static struct hash_table strings;
 static unsigned long total_adds = 0;
 
 static const char *
-add_hash (const char *str, int len)
+add_hash (const char *str, unsigned int len)
 {
+  char *const *slot;
+  const char *key;
+
+  /* If it's too large for the string cache, just copy it.
+     We don't bother trying to match these.  */
+  if (len > USHRT_MAX - 1)
+    return add_hugestring (str, len);
+
   /* Look up the string in the hash.  If it's there, return it.  */
-  char *const *slot = (char *const *) hash_find_slot (&strings, str);
-  const char *key = *slot;
+  slot = (char *const *) hash_find_slot (&strings, str);
+  key = *slot;
 
   /* Count the total number of add operations we performed.  */
   ++total_adds;
@@ -179,6 +218,13 @@ strcache_iscached (const char *str)
     if (str >= sp->buffer && str < sp->buffer + sp->end)
       return 1;
 
+  {
+    struct hugestring *hp;
+    for (hp = hugestrings; hp != 0; hp = hp->next)
+      if (str == hp->buffer)
+        return 1;
+  }
+
   return 0;
 }
 
@@ -207,14 +253,6 @@ strcache_add_len (const char *str, unsigned int len)
   return add_hash (str, len);
 }
 
-int
-strcache_setbufsize (unsigned int size)
-{
-  if (size > bufsize)
-    bufsize = size;
-  return bufsize;
-}
-
 void
 strcache_init (void)
 {
@@ -229,7 +267,7 @@ strcache_print_stats (const char *prefix)
 {
   const struct strcache *sp;
   unsigned long numbuffs = 0, fullbuffs = 0;
-  unsigned long totfree = 0, maxfree = 0, minfree = bufsize;
+  unsigned long totfree = 0, maxfree = 0, minfree = BUFSIZE;
 
   if (! strcache)
     {
@@ -268,12 +306,13 @@ strcache_print_stats (const char *prefix)
           (total_size / total_strings));
 
   printf (_("%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n"),
-          prefix, bufsize, strcache->end, strcache->count,
+          prefix, (sc_buflen_t)BUFSIZE, strcache->end, strcache->count,
           (strcache->end / strcache->count));
 
   if (numbuffs)
     {
-      unsigned long sz = total_size - bufsize;
+      /* Show information about non-current buffers.  */
+      unsigned long sz = total_size - strcache->end;
       unsigned long cnt = total_strings - strcache->count;
       sc_buflen_t avgfree = totfree / numbuffs;
 
index e3b8d3c..685ed9d 100644 (file)
@@ -1,5 +1,5 @@
 @echo off\r
-rem Copyright (C) 1996-2014 Free Software Foundation, Inc.\r
+rem Copyright (C) 1996-2016 Free Software Foundation, Inc.\r
 rem This file is part of GNU Make.\r
 rem\r
 rem GNU Make is free software; you can redistribute it and/or modify it under\r
@@ -20,4 +20,5 @@ set MAKE=%2
 set MAKEFILE=%1\r
 if x%2 == x set MAKE=nmake\r
 %MAKE% /f %MAKEFILE%\r
+if ERRORLEVEL 1 exit /B\r
 cd ..\..\r
index 9abe731..684af03 100644 (file)
        ChangeLog file for the test suite created.
 \f
 
-Copyright (C) 1992-2014 Free Software Foundation, Inc.
+Copyright (C) 1992-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 584f4a4..f55e4ba 100644 (file)
@@ -162,7 +162,7 @@ Changes from 0.1 to 0.2 (5-4-92):
 
 \f
 -------------------------------------------------------------------------------
-Copyright (C) 1992-2014 Free Software Foundation, Inc.
+Copyright (C) 1992-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 3b699ee..0213159 100644 (file)
@@ -7,7 +7,7 @@ This entire test suite, including all test files, are copyright and
 distributed under the following terms:
 
  -----------------------------------------------------------------------------
- Copyright (C) 1992-2014 Free Software Foundation, Inc.
+ Copyright (C) 1992-2016 Free Software Foundation, Inc.
  This file is part of GNU Make.
 
  GNU Make is free software; you can redistribute it and/or modify it under the
index 903c468..cc45c6b 100644 (file)
@@ -10,8 +10,8 @@
     CFLAGS       => '-g -O2',
     CPP          => 'gcc -E',
     CPPFLAGS     => '',
-    GUILE_CFLAGS => '-pthread -I/usr/include/guile/2.0  ',
-    GUILE_LIBS   => '-lguile-2.0 -lgc  ',
+    GUILE_CFLAGS => '-pthread -I/usr/include/guile/2.0',
+    GUILE_LIBS   => '-lguile-2.0 -lgc',
     LDFLAGS      => '',
     LIBS         => '-ldl '
 );
index 3f5adff..a4271b6 100755 (executable)
@@ -3,7 +3,7 @@ $! config_flags_pm.com  - Build config-flags.pm on VMS.
 $!
 $! Just good enough to run the self tests for now.
 $!
-$! Copyright (C) 2014 Free Software Foundation, Inc.
+$! Copyright (C) 2014-2016 Free Software Foundation, Inc.
 $! This file is part of GNU Make.
 $!
 $! GNU Make is free software; you can redistribute it and/or modify it under
index aa9b3bc..23c7ab0 100755 (executable)
@@ -3,7 +3,7 @@
 # Simple script to make a "shadow" test directory, using symbolic links.
 # Typically you'd put the shadow in /tmp or another local disk
 #
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
+# Copyright (C) 1992-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
index 2f17f7f..de79a91 100755 (executable)
@@ -4,7 +4,7 @@ $! This is a wrapper for the GNU make perl test programs on VMS.
 $!
 $! Parameter "-help" for description on how to use described below.
 $!
-$! Copyright (C) 2014 Free Software Foundation, Inc.
+$! Copyright (C) 2014-2016 Free Software Foundation, Inc.
 $! This file is part of GNU Make.
 $!
 $! GNU Make is free software; you can redistribute it and/or modify it under
@@ -238,18 +238,18 @@ $!
 $ if no_gnv .or. no_perl then exit 44
 $!
 $!
-$ make := $bin:make.exe
 $ default = f$environment("DEFAULT")
+$ default_dev = f$element(0, ":", default) + ":"
 $ this = f$environment("PROCEDURE")
 $ on error then goto all_error
-$ set default 'f$parse(this,,,"DEVICE")''f$parse(this,,,"DIRECTORY")'
+$ set default 'default_dev''f$parse(this,,,"DIRECTORY")'
 $!
 $! Need to make sure that the config-flags.pm exists.
 $ if f$search("config-flags.pm") .eqs. ""
 $ then
 $   @config_flags_pm.com
 $ endif
-$ define/user bin 'default',gnv$gnu:[bin]
+$ define/user bin 'default_dev'[-],gnv$gnu:[bin]
 $ define/user decc$filename_unix_noversion enable
 $ define/user decc$filename_unix_report enable
 $ define/user decc$readdir_dropdotnotype enable
index 9468fab..916f346 100644 (file)
@@ -11,7 +11,7 @@
 #                         [-make <make prog>]
 #                        (and others)
 
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
+# Copyright (C) 1992-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
@@ -140,6 +140,7 @@ sub subst_make_string
 sub run_make_test
 {
   local ($makestring, $options, $answer, $err_code, $timeout) = @_;
+  my @call = caller;
 
   # If the user specified a makefile string, create a new makefile to contain
   # it.  If the first value is not defined, use the last one (if there is
@@ -171,7 +172,7 @@ sub run_make_test
   }
 
   run_make_with_options($makefile, $options, &get_logfile(0),
-                        $err_code, $timeout);
+                        $err_code, $timeout, @call);
   &compare_output($answer, &get_logfile(1));
 
   $old_makefile = $makefile;
@@ -180,7 +181,8 @@ sub run_make_test
 
 # The old-fashioned way...
 sub run_make_with_options {
-  local ($filename,$options,$logname,$expected_code,$timeout) = @_;
+  my ($filename,$options,$logname,$expected_code,$timeout,@call) = @_;
+  @call = caller unless @call;
   local($code);
   local($command) = $make_path;
 
@@ -231,7 +233,11 @@ sub run_make_with_options {
     $command .= " $options";
   }
 
-  $command_string = "$command\n";
+  $command_string = "";
+  if (@call) {
+      $command_string = "#$call[1]:$call[2]\n";
+  }
+  $command_string .= "$command\n";
 
   if ($valgrind) {
     print VALGRIND "\n\nExecuting: $command\n";
@@ -359,6 +365,12 @@ sub set_more_defaults
    elsif ($osname =~ m%OS/2%) {
      $port_type = 'OS/2';
    }
+
+   # VMS has a GNV Unix mode or a DCL mode.
+   # The SHELL environment variable should not be defined in VMS-DCL mode.
+   elsif ($osname eq 'VMS' && !defined $ENV{"SHELL"}) {
+     $port_type = 'VMS-DCL';
+   }
    # Everything else, right now, is UNIX.  Note that we should integrate
    # the VOS support into this as well and get rid of $vos; we'll do
    # that next time.
@@ -377,6 +389,7 @@ sub set_more_defaults
    # Find the full pathname of Make.  For DOS systems this is more
    # complicated, so we ask make itself.
    if ($osname eq 'VMS') {
+     $port_type = 'VMS-DCL' unless defined $ENV{"SHELL"};
      # On VMS pre-setup make to be found with simply 'make'.
      $make_path = 'make';
    } else {
@@ -458,6 +471,8 @@ sub set_more_defaults
 
    # Set up for valgrind, if requested.
 
+   $make_command = $make_path;
+
    if ($valgrind) {
      my $args = $valgrind_args;
      open(VALGRIND, "> valgrind.out")
index b0acfec..a064dd4 100644 (file)
@@ -9,89 +9,205 @@ This only works on systems that support it.";
 exists $FEATURES{archives} or return -1;
 
 # Create some .o files to work with
-utouch(-60, qw(a1.o a2.o a3.o));
+if ($osname eq 'VMS') {
+  use Cwd;
+  my $pwd = getcwd;
+  # VMS AR needs real object files at this time.
+  foreach $afile ('a1', 'a2', 'a3') {
+    # Use non-standard extension to prevent implicit rules from recreating
+    # objects when the test tampers with the timestamp.
+    1 while unlink "$afile.c1";
+    1 while unlink "$afile.o";
+    open (MYFILE, ">$afile.c1");
+    print MYFILE "int $afile(void) {return 1;}\n";
+    close MYFILE;
+    system("cc $afile.c1 /object=$afile.o");
+  }
+} else {
+  utouch(-60, qw(a1.o a2.o a3.o));
+}
 
 my $ar = $CONFIG_FLAGS{AR};
 
+# Fallback if configure did not find AR, such as VMS
+# which does not run configure.
+$ar = 'ar' if $ar eq '';
+
+my $redir = '2>&1';
+$redir = '' if $osname eq 'VMS';
+
+my $arflags = 'rv';
+my $arvar = "AR=$ar";
+
+# Newer versions of binutils can be built with --enable-deterministic-archives
+# which forces all timestamps (among other things) to always be 0, defeating
+# GNU make's archive support.  See if ar supports the U option to disable it.
+unlink('libxx.a');
+$_ = `$ar U$arflags libxx.a a1.o $redir`;
+if ($? == 0) {
+    $arflags = 'Urv';
+    $arvar = "$arvar ARFLAGS=$arflags";
+}
+
 # Some versions of ar print different things on creation.  Find out.
-my $created = `$ar rv libxx.a a1.o 2>&1`;
+unlink('libxx.a');
+my $created = `$ar $arflags libxx.a a1.o $redir`;
 
 # Some versions of ar print different things on add.  Find out.
-my $add = `$ar rv libxx.a a2.o 2>&1`;
+my $add = `$ar $arflags libxx.a a2.o $redir`;
 $add =~ s/a2\.o/#OBJECT#/g;
 
 # Some versions of ar print different things on replacement.  Find out.
-my $repl = `$ar rv libxx.a a2.o 2>&1`;
+my $repl = `$ar $arflags libxx.a a2.o $redir`;
 $repl =~ s/a2\.o/#OBJECT#/g;
 
 unlink('libxx.a');
 
 # Very simple
-run_make_test('all: libxx.a(a1.o)',
-              '', "$ar rv libxx.a a1.o\n$created");
+my $answer = "$ar $arflags libxx.a a1.o\n$created";
+if ($port_type eq 'VMS-DCL') {
+  $answer = 'library /replace libxx.a a1.o';
+}
+run_make_test('all: libxx.a(a1.o)', $arvar, $answer);
 
 # Multiple .o's.  Add a new one to the existing library
 ($_ = $add) =~ s/#OBJECT#/a2.o/g;
-run_make_test('all: libxx.a(a1.o a2.o)',
-              '', "$ar rv libxx.a a2.o\n$_");
+
+$answer = "$ar $arflags libxx.a a2.o\n$_";
+if ($port_type eq 'VMS-DCL') {
+  $answer = 'library /replace libxx.a a2.o';
+}
+run_make_test('all: libxx.a(a1.o a2.o)', $arvar, $answer);
 
 # Touch one of the .o's so it's rebuilt
-utouch(-40, 'a1.o');
+if ($port_type eq 'VMS-DCL') {
+  # utouch is not changing what VMS library compare is testing for.
+  # So do a real change by regenerating the file.
+  1 while unlink('a1.o');
+  # Later time stamp than last insertion.
+  sleep(2);
+  system('cc a1.c1 /object=a1.o');
+  # Next insertion will have a later timestamp.
+  sleep(2);
+} else {
+  utouch(-40, 'a1.o');
+}
+
 ($_ = $repl) =~ s/#OBJECT#/a1.o/g;
-run_make_test(undef, '', "$ar rv libxx.a a1.o\n$_");
+$answer = "$ar $arflags libxx.a a1.o\n$_";
+if ($port_type eq 'VMS-DCL') {
+  $answer = 'library /replace libxx.a a1.o';
+}
+run_make_test(undef, $arvar, $answer);
 
 # Use wildcards
-run_make_test('all: libxx.a(*.o)',
-              '', "#MAKE#: Nothing to be done for 'all'.\n");
+$answer = "#MAKE#: Nothing to be done for 'all'.\n";
+run_make_test('all: libxx.a(*.o)', $arvar, $answer);
 
 # Touch one of the .o's so it's rebuilt
-utouch(-30, 'a1.o');
+if ($port_type eq 'VMS-DCL') {
+  # utouch is not changing what VMS library compare is testing for.
+  # So do a real change by regenerating the file.
+  1 while unlink('a1.o');
+  # Make timestamp later than last insertion.
+  sleep(2);
+  system('cc a1.c1 /object=a1.o');
+} else {
+  utouch(-30, 'a1.o');
+}
 ($_ = $repl) =~ s/#OBJECT#/a1.o/g;
-run_make_test(undef, '', "$ar rv libxx.a a1.o\n$_");
+$answer = "$ar $arflags libxx.a a1.o\n$_";
+if ($port_type eq 'VMS-DCL') {
+  $answer = 'library /replace libxx.a a1.o';
+}
+run_make_test(undef, $arvar, $answer);
 
 # Use both wildcards and simple names
-utouch(-50, 'a2.o');
+if ($port_type eq 'VMS-DCL') {
+  # utouch is not changing what VMS library compare is testing for.
+  # So do a real change by regenerating the file.
+  1 while unlink('a2.o');
+  sleep(2);
+  system('cc a2.c1 /object=a2.o');
+} else {
+  utouch(-50, 'a2.o');
+}
 ($_ = $add) =~ s/#OBJECT#/a3.o/g;
-$_ .= "$ar rv libxx.a a2.o\n";
+$_ .= "$ar $arflags libxx.a a2.o\n";
 ($_ .= $repl) =~ s/#OBJECT#/a2.o/g;
-run_make_test('all: libxx.a(a3.o *.o)', '',
-              "$ar rv libxx.a a3.o\n$_");
+$answer = "$ar $arflags libxx.a a3.o\n$_";
+if ($port_type eq 'VMS-DCL') {
+  $answer = 'library /replace libxx.a a3.o';
+}
+
+run_make_test('all: libxx.a(a3.o *.o)', $arvar, $answer);
 
 # Check whitespace handling
-utouch(-40, 'a2.o');
+if ($port_type eq 'VMS-DCL') {
+  # utouch is not changing what VMS library compare is testing for.
+  # So do a real change by regenerating the file.
+  1 while unlink('a2.o');
+  sleep(2);
+  system('cc a2.c1 /object=a2.o');
+} else {
+  utouch(-40, 'a2.o');
+}
 ($_ = $repl) =~ s/#OBJECT#/a2.o/g;
-run_make_test('all: libxx.a(  a3.o    *.o     )', '',
-              "$ar rv libxx.a a2.o\n$_");
+$answer = "$ar $arflags libxx.a a2.o\n$_";
+if ($port_type eq 'VMS-DCL') {
+  $answer = 'library /replace libxx.a a2.o';
+}
+run_make_test('all: libxx.a(  a3.o    *.o     )', $arvar, $answer);
 
-rmfiles(qw(a1.o a2.o a3.o libxx.a));
+rmfiles(qw(a1.c1 a2.c1 a3.c1 a1.o a2.o a3.o libxx.a));
 
 # Check non-archive targets
 # See Savannah bug #37878
-run_make_test(q!
+$mk_string = q!
 all: foo(bar).baz
 foo(bar).baz: ; @echo '$@'
-!,
-              '', "foo(bar).baz\n");
+!;
+
+if ($port_type eq 'VMS-DCL') {
+    $mk_string =~ s/echo/write sys\$\$output/;
+    $mk_string =~ s/\'/\"/g;
+}
+run_make_test($mk_string, $arvar, "foo(bar).baz\n");
 
 # Check renaming of archive targets.
 # See Savannah bug #38442
 
 mkdir('artest', 0777);
 touch('foo.vhd');
-
-run_make_test(q!
+$mk_string = q!
 DIR = artest
 vpath % $(DIR)
 default: lib(foo)
 (%): %.vhd ; @cd $(DIR) && touch $(*F) && $(AR) $(ARFLAGS) $@ $(*F) >/dev/null 2>&1 && rm $(*F)
 .PHONY: default
-!,
-              '', "");
-
-run_make_test(undef, '', "#MAKE#: Nothing to be done for 'default'.\n");
+!;
+if ($port_type eq 'VMS-DCL') {
+  $mk_string =~ s#= artest#= sys\$\$disk:\[.artest\]#;
+  $mk_string =~ s#lib\(foo\)#lib.tlb\(foo\)#;
+  $mk_string =~ s#; \@cd#; pipe SET DEFAULT#;
+  $mk_string =~
+    s#touch \$\(\*F\)#touch \$\(\*F\) && library/create/text sys\$\$disk:\$\@#;
+  $mk_string =~
+    s#library#if f\$\$search(\"\$\@\") \.eqs\. \"\" then library#;
+  # VMS needs special handling for null extension
+  $mk_string =~ s#\@ \$\(\*F\)#\@ \$\(\*F\)\.#;
+  $mk_string =~ s#>/dev/null 2>&1 ##;
+}
+run_make_test($mk_string, $arvar, "");
+
+run_make_test(undef, $arvar, "#MAKE#: Nothing to be done for 'default'.\n");
 
 unlink('foo.vhd');
-remove_directory_tree('artest');
+if ($osname eq 'VMS') {
+  remove_directory_tree("$pwd/artest");
+} else {
+  remove_directory_tree('artest');
+}
 
 # This tells the test driver that the perl test script executed properly.
 1;
index 2ece60b..78344b9 100644 (file)
@@ -141,6 +141,22 @@ all: ; @:',
               '',
               'success');
 
+# SV 47960 : ensure variable assignments in non-taken legs don't cause problems
+run_make_test('
+ifneq ($(FOO),yes)
+target:
+else
+BAR = bar
+target:
+endif
+       @echo one
+',
+              '', "one\n");
+
 
 # This tells the test driver that the perl test script executed properly.
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index 1097775..80ddb31 100644 (file)
@@ -151,8 +151,7 @@ two');
 
 unlink('result','one','two');
 
-# TEST 10: check for proper backslash handling
-#          Savannah bug #33399
+# TEST 10: SV 33399 : check for proper backslash handling
 
 run_make_test('
 a\ xb :: ; @echo one
@@ -160,5 +159,47 @@ a\ xb :: ; @echo two
 ',
               '', "one\ntwo\n");
 
+# Test 11: SV 44742 : All double-colon rules should be run in parallel build.
+
+run_make_test('result :: 01
+       @echo update
+       @touch $@
+result :: 02
+       @echo update
+       @touch $@
+result :: 03
+       @echo update
+       @touch $@
+result :: 04
+       @echo update
+       @touch $@
+result :: 05
+       @echo update
+       @touch $@
+01 02 03 04 05:
+       @touch 01 02 03 04 05
+',
+              '-j10 result', "update\nupdate\nupdate\nupdate\nupdate\n");
+
+unlink('result', '01', '02', '03', '04', '05');
+
+# Test 12: SV 44742 : Double-colon rules with parallelism
+
+run_make_test('
+root: all
+       echo root
+all::
+       echo all_one
+all:: 3
+       echo all_two
+%:
+       sleep $*
+',
+              '-rs -j2 1 2 root', "all_one\nall_two\nroot\n");
+
 # This tells the test driver that the perl test script executed properly.
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index c0339cb..ebd4383 100644 (file)
@@ -30,7 +30,7 @@ open(MAKEFILE,"> $makefile");
 print MAKEFILE "clean:\n"
               ."\t-$rm_command cleanit\n"
               ."\t$rm_command foo\n"
-             ."clean2: \n"
+              ."clean2: \n"
               ."\t$rm_command cleanit\n"
               ."\t$rm_command foo\n";
 
@@ -50,8 +50,7 @@ $delete_error_code = $? >> 8;
 
 $answer = "$rm_command cleanit
 $cleanit_error
-$makefile:2: recipe for target 'clean' failed
-$make_name: [clean] Error $delete_error_code (ignored)
+$make_name: [$makefile:2: clean] Error $delete_error_code (ignored)
 $rm_command foo\n";
 
 &run_make_with_options($makefile,"",&get_logfile);
@@ -78,8 +77,7 @@ if (!$vos)
 
 $answer = "$rm_command cleanit
 $cleanit_error
-$makefile:5: recipe for target 'clean2' failed
-$make_name: [clean2] Error $delete_error_code (ignored)
+$make_name: [$makefile:5: clean2] Error $delete_error_code (ignored)
 $rm_command foo\n";
 
 &run_make_with_options($makefile,"clean2 -i",&get_logfile);
@@ -92,4 +90,18 @@ if (!$vos) {
    &compare_output($answer,&get_logfile(1));
 }
 
+# Test that error line offset works
+
+run_make_test(q!
+all:
+       @echo hi
+       @echo there
+       @exit 1
+!,
+              '', "hi\nthere\n#MAKE#: *** [#MAKEFILE#:5: all] Error 1", 512);
+
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index ee014bd..f78563f 100644 (file)
@@ -165,6 +165,70 @@ baz: end
 #MAKE#: *** No rule to make target 'end', needed by 'baz'.  Stop.\n",
 512);
 
+# Test include of make-able file doesn't show an error (Savannah #102)
+run_make_test(q!
+.PHONY: default
+default:; @echo DONE
+
+inc1:; echo > $@
+include inc1
+include inc2
+inc2:; echo > $@
+!,
+              '', "echo > inc2\necho > inc1\nDONE\n");
+
+rmfiles('inc1', 'inc2');
+
+# Test include of non-make-able file does show an error (Savannah #102)
+run_make_test(q!
+.PHONY: default
+default:; @echo DONE
+
+inc1:; echo > $@
+include inc1
+include inc2
+!,
+              '', "#MAKEFILE#:7: inc2: No such file or directory\n#MAKE#: *** No rule to make target 'inc2'.  Stop.\n", 512);
+
+rmfiles('inc1');
+
+# Include same file multiple times
+
+run_make_test(q!
+default:; @echo DEFAULT
+include inc1
+inc1:; echo > $@
+include inc1
+!,
+              '', "echo > inc1\nDEFAULT\n");
+
+rmfiles('inc1');
+
+# Included file has a prerequisite that fails to build
+
+run_make_test(q!
+default:; @echo DEFAULT
+include inc1
+inc1: foo; echo > $@
+foo:; exit 1
+!,
+              '', "exit 1\n#MAKEFILE#:3: inc1: No such file or directory\n#MAKE#: *** [#MAKEFILE#:5: foo] Error 1\n", 512);
+
+rmfiles('inc1');
+
+# Included file has a prerequisite we don't know how to build
+
+run_make_test(q!
+default:; @echo DEFAULT
+include inc1
+inc1: foo; echo > $@
+!,
+              '', "#MAKEFILE#:3: inc1: No such file or directory\n#MAKE#: *** No rule to make target 'foo', needed by 'inc1'.  Stop.\n", 512);
+
+rmfiles('inc1');
+
+# include a directory
+
 if ($all_tests) {
     # Test that include of a rebuild-able file doesn't show a warning
     # Savannah bug #102
index cedd4b3..7da4a65 100644 (file)
@@ -12,7 +12,49 @@ if (!$parallel_jobs) {
   return -1;
 }
 
-# Don't put --jobserver-fds into a re-exec'd MAKEFLAGS.
+# Shorthand
+my $np = '--no-print-directory';
+
+# Simple test of MAKEFLAGS settings
+run_make_test(q!
+SHOW = $(patsubst --jobserver-auth=%,--jobserver-auth=<auth>,$(MAKEFLAGS))
+recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all
+all:;@echo $@: "/$(SHOW)/"
+!,
+              "-j2 $np", "recurse: /-j2 --jobserver-auth=<auth> $np/\nall: /-j2 --jobserver-auth=<auth> $np/\n");
+
+# Setting parallelism with the environment
+# Command line should take precedence over the environment
+$extraENV{MAKEFLAGS} = "-j2 $np";
+run_make_test(q!
+SHOW = $(patsubst --jobserver-auth=%,--jobserver-auth=<auth>,$(MAKEFLAGS))
+recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all
+all:;@echo $@: "/$(SHOW)/"
+!,
+              '', "recurse: /-j2 --jobserver-auth=<auth> $np/\nall: /-j2 --jobserver-auth=<auth> $np/\n");
+delete $extraENV{MAKEFLAGS};
+
+# Test override of -jN
+$extraENV{MAKEFLAGS} = "-j9 $np";
+run_make_test(q!
+SHOW = $(patsubst --jobserver-auth=%,--jobserver-auth=<auth>,$(MAKEFLAGS))
+recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE) -j3 -f #MAKEFILE# recurse2
+recurse2: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all
+all:;@echo $@: "/$(SHOW)/"
+!,
+              "-j2 $np", "recurse: /-j2 --jobserver-auth=<auth> $np/\n#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nrecurse2: /-j3 --jobserver-auth=<auth> $np/\nall: /-j3 --jobserver-auth=<auth> $np/\n");
+delete $extraENV{MAKEFLAGS};
+
+# Test override of -jN with -j
+run_make_test(q!
+SHOW = $(patsubst --jobserver-auth=%,--jobserver-auth=<auth>,$(MAKEFLAGS))
+recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE) -j -f #MAKEFILE# recurse2
+recurse2: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all
+all:;@echo $@: "/$(SHOW)/"
+!,
+              "-j2 $np", "recurse: /-j2 --jobserver-auth=<auth> $np/\n#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nrecurse2: /-j $np/\nall: /-j $np/\n");
+
+# Don't put --jobserver-auth into a re-exec'd MAKEFLAGS.
 # We can't test this directly because there's no way a makefile can
 # show the value of MAKEFLAGS we were re-exec'd with.  We can intuit it
 # by looking for "disabling jobserver mode" warnings; we should only
@@ -34,7 +76,7 @@ inc.mk:
 #      @echo 'MAKEFLAGS = $(MAKEFLAGS)'
        @echo 'FOO = bar' > $@
 !,
-              '--no-print-directory -j2', "#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nall\n");
+              "$np -j2", "#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nall\n");
 
 unlink('inc.mk');
 
@@ -52,10 +94,14 @@ close(MAKEFILE);
 run_make_test(q!
 default: ; @ #MAKEPATH# -f Makefile2
 !,
-              '-j2 --no-print-directory',
+              "-j2 $np",
 "#MAKE#[1]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.
 #MAKE#[1]: Nothing to be done for 'foo'.");
 
 rmfiles('Makefile2');
 
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index 1f8cdc2..2e9318d 100644 (file)
@@ -56,7 +56,7 @@ load testload.so
 POST := $(.LOADED)
 all: ; @echo pre=$(PRE) post=$(POST) $(TESTLOAD)
 !,
-              '', "pre= post=testload.so implicit\n");
+              '--warn-undefined-variables', "pre= post=testload.so implicit\n");
 
 # TEST 2
 # Load using an explicit function
index a7534cb..7237e65 100644 (file)
@@ -53,6 +53,8 @@ sub output_sync_set {
 
 @syncfiles = qw(mksync.foo mksync.foo_start mksync.bar mksync.bar_start);
 
+$tmout = 30;
+
 output_sync_clean();
 mkdir('foo', 0777);
 mkdir('bar', 0777);
@@ -140,7 +142,7 @@ bar: start
 bar: end
 baz: start
 baz: end
-#MAKE#[1]: Leaving directory '#PWD#/bar'\n", 0, 6);
+#MAKE#[1]: Leaving directory '#PWD#/bar'\n", 0, $tmout);
 
 # Test per-target synchronization.
 # Note we have to sleep again here after starting the foo makefile before
@@ -171,7 +173,7 @@ foo: end
 #MAKE#[1]: Entering directory '#PWD#/bar'
 baz: start
 baz: end
-#MAKE#[1]: Leaving directory '#PWD#/bar'\n", 0, 6);
+#MAKE#[1]: Leaving directory '#PWD#/bar'\n", 0, $tmout);
 
 # Rerun but this time suppress the directory tracking
 unlink(@syncfiles);
@@ -183,7 +185,7 @@ bar: end
 foo: start
 foo: end
 baz: start
-baz: end\n", 0, 6);
+baz: end\n", 0, $tmout);
 
 # Test that messages from make itself are enclosed with
 # "Entering/Leaving directory" messages.
@@ -204,11 +206,9 @@ bar: end
 #MAKE#[1]: Entering directory '#PWD#/foo'
 foo-fail: start
 foo-fail: end
-Makefile:20: recipe for target 'foo-fail' failed
-#MAKE#[1]: *** [foo-fail] Error 1
+#MAKE#[1]: *** [Makefile:23: foo-fail] Error 1
 #MAKE#[1]: Leaving directory '#PWD#/foo'
-#MAKEFILE#:4: recipe for target 'make-foo-fail' failed
-#MAKE#: *** [make-foo-fail] Error 2\n",
+#MAKE#: *** [#MAKEFILE#:4: make-foo-fail] Error 2\n",
 512);
 
 # Test the per-job synchronization.
@@ -238,7 +238,7 @@ bar: end
 #MAKE#[1]: Leaving directory '#PWD#/bar'
 #MAKE#[1]: Entering directory '#PWD#/foo'
 foo: end
-#MAKE#[1]: Leaving directory '#PWD#/foo'\n", 0, 6);
+#MAKE#[1]: Leaving directory '#PWD#/foo'\n", 0, $tmout);
 
 
 # Remove temporary directories and contents.
@@ -326,7 +326,7 @@ run_make_test(qq!
 all: t1
 t1: ; -\@\$(MAKE) -f $m1
 !,
-              "-j -Oline", "#MAKE#[1]: Entering directory '#PWD#'\nd1 stderr\nd1 stdout\n$m1:3: *** d1 failed.  Stop.\n#MAKE#[1]: Leaving directory '#PWD#'\n#MAKEFILE#:3: recipe for target 't1' failed\n#MAKE#: [t1] Error 2 (ignored)\n");
+              "-j -Oline", "#MAKE#[1]: Entering directory '#PWD#'\nd1 stderr\nd1 stdout\n$m1:3: *** d1 failed.  Stop.\n#MAKE#[1]: Leaving directory '#PWD#'\n#MAKE#: [#MAKEFILE#:3: t1] Error 2 (ignored)\n");
 
 rmfiles($m1);
 
@@ -337,5 +337,13 @@ foo: $(OBJS) ; echo $(or $(filter %.o,$^),$(error fail))
 !,
               '-O', "#MAKEFILE#:2: *** fail.  Stop.\n", 512);
 
+# SV 47365: Make sure exec failure error messages are shown
+# Is "127" not always the same everywhere?  We may have to detect it?
+
+run_make_test(q!
+all:: ; @./foo bar baz
+!,
+              '-O', "#MAKE#: ./foo: Command not found\n#MAKE#: *** [#MAKEFILE#:2: all] Error 127\n", 512);
+
 # This tells the test driver that the perl test script executed properly.
 1;
index c702c26..fabe548 100644 (file)
@@ -99,15 +99,12 @@ ok:
        \@$sleep_command 4
        \@echo Ok done",
               '-rR -j5', "Fail
-#MAKEFILE#:6: recipe for target 'fail.1' failed
-#MAKE#: *** [fail.1] Error 1
+#MAKE#: *** [#MAKEFILE#:8: fail.1] Error 1
 #MAKE#: *** Waiting for unfinished jobs....
 Fail
-#MAKEFILE#:6: recipe for target 'fail.2' failed
-#MAKE#: *** [fail.2] Error 1
+#MAKE#: *** [#MAKEFILE#:8: fail.2] Error 1
 Fail
-#MAKEFILE#:6: recipe for target 'fail.3' failed
-#MAKE#: *** [fail.3] Error 1
+#MAKE#: *** [#MAKEFILE#:8: fail.3] Error 1
 Ok done",
              512);
 
@@ -214,3 +211,7 @@ rmfiles('file1', 'file2', 'file3', 'file4');
 # rmfiles(qw(dependfile output));
 
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index 0ff49a7..c7ae7cf 100644 (file)
@@ -110,8 +110,7 @@ $(dir)/foo.bar:
 
 ',
 "dir=$dir",
-"#MAKEFILE#:6: recipe for target '$dir/foo.bar' failed
-#MAKE#: *** [$dir/foo.bar] Error 1",
+"#MAKE#: *** [#MAKEFILE#:6: $dir/foo.bar] Error 1",
 512);
 
 unlink("$dir/foo.bar");
@@ -223,3 +222,7 @@ all: foo.x foo-mt.x
 
 # This tells the test driver that the perl test script executed properly.
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index c6ede28..839fb72 100644 (file)
@@ -17,6 +17,12 @@ my @files_to_touch = ("a1${pathsep}lib1.a",
                       "b3${pathsep}lib3.so");
 &touch(@files_to_touch);
 
+my $answer = "a1${pathsep}lib1.a a1${pathsep}libc.a " .
+             "a2${pathsep}lib2.a lib3.a\n";
+if ($port_type eq 'VMS-DCL') {
+    $answer =~ s/ /,/g;
+}
+
 run_make_test('
 vpath %.h b3
 vpath %.a a1
@@ -25,7 +31,7 @@ vpath % a2 b2
 vpath % b3
 all: -l1 -lc -l2 -l3; @echo $^
 ',
-              '', "a1${pathsep}lib1.a a1${pathsep}libc.a a2${pathsep}lib2.a lib3.a\n");
+              '', $answer);
 
 unlink(@files_to_touch);
 for my $d (@dirs_to_make) {
index 361788c..9ade3f0 100644 (file)
@@ -86,8 +86,7 @@ cat ${VP}foo.c bar.c > foo.b 2>/dev/null || exit 1
 
 $answer = "not creating notarget.c from notarget.d
 cat notarget.c > notarget.b 2>/dev/null || exit 1
-$makefile:16: recipe for target 'notarget.b' failed
-$make_name: *** [notarget.b] Error 1
+$make_name: *** [$makefile:16: notarget.b] Error 1
 ";
 
 &compare_output($answer,&get_logfile(1));
@@ -127,3 +126,7 @@ rm inter.c
 unlink @touchedfiles unless $keep;
 
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index 9db9da7..dc1a623 100644 (file)
@@ -4,11 +4,7 @@ $description = "Test the call function.\n";
 $details = "Try various uses of call and ensure they all give the correct
 results.\n";
 
-open(MAKEFILE, "> $makefile");
-
-# The Contents of the MAKEFILE ...
-
-print MAKEFILE <<'EOMAKE';
+run_make_test(q!
 # Simple, just reverse two things
 #
 reverse = $2 $1
@@ -48,35 +44,22 @@ all: ; @echo '$(call reverse,bar,foo)'; \
         echo '$(call my-foreach,a,,,)'; \
         echo '$(call my-if,a,b,c)'; \
         echo '$(call two,bar,baz)'; \
-       echo '$(call tclose,foo)'
-
-
+       echo '$(call tclose,foo)';
+!,
+              "", "foo bar\ndefault file file\nb d f\n\n\nb\nbar foo baz\nfoo bar baz blarp quux \n");
 
-EOMAKE
-
-# These won't work until/unless PR/1527 is resolved.
-#        echo '$(call my-foreach,a,x y z,$(a)$(a))'; \
-#        echo '$(call my-if,,$(warning don't print this),ok)'
+# These won't work because call expands all its arguments first, before
+# passing them on, then marks them as resolved/simple, so they're not
+# expanded again by the function.
 #
-# $answer = "xx yy zz\nok\n";
-
-# END of Contents of MAKEFILE
-
-close(MAKEFILE);
-
-&run_make_with_options($makefile, "", &get_logfile);
-$answer = "foo bar\ndefault file file\nb d f\n\n\nb\nbar foo baz\nfoo bar baz blarp quux \n";
-&compare_output($answer, &get_logfile(1));
-
+#        echo '$(call my-foreach,a,x y z,$$(a)$$(a))'; \
+#        echo '$(call my-if,,$$(info don't print this),$$(info do print this))'
+#
+# $answer = "xx yy zz\ndo print this\n";
 
 # TEST eclipsing of arguments when invoking sub-calls
 
-$makefile2 = &get_tmpfile;
-
-open(MAKEFILE,"> $makefile2");
-
-print MAKEFILE <<'EOF';
-
+run_make_test(q!
 all = $1 $2 $3 $4 $5 $6 $7 $8 $9
 
 level1 = $(call all,$1,$2,$3,$4,$5)
@@ -88,13 +71,8 @@ all:
        @echo $(call level1,1,2,3,4,5,6,7,8)
        @echo $(call level2,1,2,3,4,5,6,7,8)
        @echo $(call level3,1,2,3,4,5,6,7,8)
-EOF
-
-close(MAKEFILE);
-
-&run_make_with_options($makefile2, "", &get_logfile);
-$answer = "1 2 3 4 5 6 7 8 9\n1 2 3 4 5\n1 2 3\n1 2 3\n";
-&compare_output($answer,&get_logfile(1));
+!,
+              "", "1 2 3 4 5 6 7 8 9\n1 2 3 4 5\n1 2 3\n1 2 3\n");
 
 # Ensure that variables are defined in global scope even in a $(call ...)
 
@@ -108,3 +86,7 @@ all: ; @echo "$${X123-not set}"
               '', "\n");
 
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index 0d61177..998afe4 100644 (file)
@@ -54,7 +54,7 @@ $answer = "Some stuff\n$makefile:12: *** error is maybe.  Stop.\n";
 # Test #4
 
 &run_make_with_options($makefile, "ERROR4=definitely", &get_logfile, 512);
-$answer = "Some stuff\n$makefile:16: *** error is definitely.  Stop.\n";
+$answer = "Some stuff\n$makefile:17: *** error is definitely.  Stop.\n";
 &compare_output($answer,&get_logfile(1));
 
 # Test #5
@@ -66,8 +66,6 @@ $answer = "$makefile:22: *** Error found!.  Stop.\n";
 # This tells the test driver that the perl test script executed properly.
 1;
 
-
-
-
-
-
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index 55eb58a..904db79 100644 (file)
@@ -115,4 +115,47 @@ x:;@cat file.out
 
 unlink('file.out');
 
+# Reading files
+run_make_test(q!
+$(file >file.out,A = foo)
+X1 := $(file <file.out)
+$(file >>file.out,B = bar)
+$(eval $(file <file.out))
+
+x:;@echo '$(X1)'; echo '$(A)'; echo '$(B)'
+!,
+              '', "A = foo\nfoo\nbar\n");
+
+unlink('file.out');
+
+# Reading from non-existent file
+run_make_test(q!
+X1 := $(file <file.out)
+x:;@echo '$(X1)';
+!,
+              '', "\n");
+
+# Extra arguments in read mode
+run_make_test(q!
+X1 := $(file <file.out,foo)
+x:;@echo '$(X1)';
+!,
+              '', "#MAKEFILE#:2: *** file: too many arguments.  Stop.\n", 512);
+
+
+# Missing filename
+run_make_test('$(file >)', '',
+              "#MAKEFILE#:1: *** file: missing filename.  Stop.\n", 512);
+
+run_make_test('$(file >>)', '',
+              "#MAKEFILE#:1: *** file: missing filename.  Stop.\n", 512);
+
+run_make_test('$(file <)', '',
+              "#MAKEFILE#:1: *** file: missing filename.  Stop.\n", 512);
+
+# Bad call
+
+run_make_test('$(file foo)', '',
+              "#MAKEFILE#:1: *** file: invalid file operation: foo.  Stop.\n", 512);
+
 1;
index 4d1a11d..451839a 100644 (file)
@@ -53,8 +53,26 @@ $(foreach x,FOREACH,$(eval $(value mktarget)))',
               '',
               'FOREACH');
 
+# Allow variable names with trailing space
+run_make_test(q!
+$(foreach \
+  a \
+, b c d \
+, $(info $a))
+all:;@:
+!,
+              "", "b\nc\nd\n");
+
+# Allow empty variable names.  We still expand the body.
 
-# TEST 2: Check some error conditions.
+run_make_test('
+x = $(foreach ,1 2 3,a)
+y := $x
+
+all: ; @echo $y',
+              '', "a a a\n");
+
+# Check some error conditions.
 
 run_make_test('
 x = $(foreach )
@@ -66,12 +84,12 @@ all: ; @echo $y',
               512);
 
 run_make_test('
-x = $(foreach )
+x = $(foreach x,y)
 y := $x
 
 all: ; @echo $y',
               '',
-              "#MAKEFILE#:2: *** insufficient number of arguments (1) to function 'foreach'.  Stop.",
+              "#MAKEFILE#:2: *** insufficient number of arguments (2) to function 'foreach'.  Stop.",
               512);
 
 1;
index 723cd0e..809c77f 100644 (file)
@@ -4,11 +4,26 @@ $description = 'Test the $(shell ...) function.';
 
 $details = '';
 
+# Test standard shell
+run_make_test('.PHONY: all
+OUT := $(shell echo hi)
+all: ; @echo $(OUT)
+              ','','hi');
 
 # Test shells inside rules.
 run_make_test('.PHONY: all
 all: ; @echo $(shell echo hi)
-','','hi');
+              ','','hi');
+
+# Verify .SHELLSTATUS
+run_make_test('.PHONY: all
+PRE := $(.SHELLSTATUS)
+$(shell exit 0)
+OK := $(.SHELLSTATUS)
+$(shell exit 1)
+BAD := $(.SHELLSTATUS)
+all: ; @echo PRE=$(PRE) OK=$(OK) BAD=$(BAD)
+              ','','PRE= OK=0 BAD=1');
 
 
 # Test unescaped comment characters in shells.  Savannah bug #20513
@@ -27,6 +42,19 @@ run_make_test('
 export HI = $(shell echo hi)
 .PHONY: all
 all: ; @echo $$HI
-','','hi');
+    ','','hi');
+
+# Test shell errors in recipes including offset
+run_make_test('
+all:
+       @echo hi
+       $(shell ./basdfdfsed there)
+       @echo there
+',
+              '', "#MAKE#: ./basdfdfsed: Command not found\nhi\nthere\n");
 
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index b558910..e6e1343 100644 (file)
@@ -42,6 +42,10 @@ A boy captured_by days end, has jazz_and_a midnight moon_light rise
 
 run_make_test("FOO = a b\tc\rd\fe \f \f \f \f \ff
 all: ; \@echo \$(words \$(sort \$(FOO)))\n",
-              '', "5\n");
+              '', "6\n");
 
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index cd452d4..16eb83b 100644 (file)
@@ -52,14 +52,32 @@ $answer = "Some stuff\n$makefile:10: warning is maybe\nhi\n";
 # Test #4
 
 &run_make_with_options($makefile, "WARNING4=definitely", &get_logfile, 0);
-$answer = "Some stuff\n$makefile:14: warning is definitely\nhi\nthere\n";
+$answer = "Some stuff\n$makefile:15: warning is definitely\nhi\nthere\n";
 &compare_output($answer,&get_logfile(1));
 
+# Test linenumber offset
+
+run_make_test(q!
+all: one two
+       $(warning in $@ line 3)
+       @true
+       $(warning in $@ line 5)
+
+one two:
+       $(warning in $@ line 8)
+       @true
+       $(warning in $@ line 10)
+!,
+              '', "#MAKEFILE#:8: in one line 8
+#MAKEFILE#:10: in one line 10
+#MAKEFILE#:8: in two line 8
+#MAKEFILE#:10: in two line 10
+#MAKEFILE#:3: in all line 3
+#MAKEFILE#:5: in all line 5\n");
+
 # This tells the test driver that the perl test script executed properly.
 1;
 
-
-
-
-
-
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index 4fc3f63..fc323ce 100644 (file)
@@ -125,5 +125,103 @@ close(MAKEFILE);
 run_make_with_options($m2, '', get_logfile());
 compare_output("foo bar\n", get_logfile(1));
 
+# Test different types of whitespace, and bsnl inside functions
+
+sub xlate
+{
+    $_ = $_[0];
+    s/\\r/\r/g;
+    s/\\t/\t/g;
+    s/\\f/\f/g;
+    s/\\v/\v/g;
+    s/\\n/\n/g;
+    return $_;
+}
+
+run_make_test(xlate(q!
+$(foreach\r  a \t , b\t  c \r ,$(info    $a  \r  )      )
+all:;@:
+!),
+              '', "b  \r  \nc  \r  \n");
+
+run_make_test(xlate(q!
+all:;@:$(foreach\r  a \t , b\t  c \r ,$(info    $a  \r  )      )
+!),
+              '', "b  \r  \nc  \r  \n");
+
+run_make_test(xlate(q!
+$(foreach \
+\r  a \t\
+ , b\t \
+ c \r ,$(info  \
+  $a  \r  )  \
+    )
+all:;@:
+!),
+              '', "b  \r  \nc  \r  \n");
+
+run_make_test(xlate(q!
+all:;@:$(foreach \
+\r  a \t\
+ , b\t \
+ c \r ,$(info  \
+  $a  \r  )  \
+    )
+!),
+              '', "b  \r  \nc  \r  \n");
+
+run_make_test(xlate(q!
+define FOO
+$(foreach
+\r  a \t
+ , b\t
+ c \r ,$(info
+  $a  \r  )
+    )
+endef
+$(FOO)
+all:;@:
+!),
+              '', "b  \r  \nc  \r  \n");
+
+run_make_test(xlate(q!
+define FOO
+$(foreach
+\r  a \t
+ , b\t
+ c \r ,$(info
+  $a  \r  )
+    )
+endef
+all:;@:$(FOO)
+!),
+              '', "b  \r  \nc  \r  \n");
+
+# Test variables in recipes that expand to multiple lines
+
+run_make_test(q!
+define var
+
+echo foo
+
+
+echo bar
+endef
+all:;$(var)
+!,
+              '', "echo foo\nfoo\necho bar\nbar\n");
+
+run_make_test(q!
+define var
+
+echo foo
+
+@
+
+echo bar
+endef
+all:;$(var)
+!,
+              '', "echo foo\nfoo\necho bar\nbar\n");
 
 1;
index 6580e51..2ec9810 100644 (file)
@@ -7,9 +7,12 @@ $description = "Make sure make exits with an error if fopen fails.";
 # since it's hard to know what it will be, exactly.
 # See Savannah bug #27374.
 
+# Use a longer-than-normal timeout: some systems have more FDs available?
+# We also set ulimit -n 512 in check-regression in Makefile.am, which see.
+# See Savannah bug #42390.
 run_make_test(q!
 include $(lastword $(MAKEFILE_LIST))
 !,
-              '', undef, 512);
+              '', undef, 512, 300);
 
 1;
index 8ad0f8e..7bbff1c 100644 (file)
@@ -310,4 +310,6 @@ foo     bar
 hi
 foo     bar');
 
+run_make_test('x:;@-exit 1', '', "#MAKE#: [#MAKEFILE#:1: x] Error 1 (ignored)\n");
+
 1;
index 9c708b7..4c4c4cf 100644 (file)
@@ -45,7 +45,6 @@ include foo.x
 foo.x: ; @touch $@
 ',
               '-B', 'MAKE_RESTARTS=
-#MAKEFILE#:4: foo.x: No such file or directory
 MAKE_RESTARTS=1');
 
 rmfiles('foo.x');
@@ -63,7 +62,6 @@ foo.x: ; @touch $@
 blah.x: ; @echo $@
 ',
               '-B', 'MAKE_RESTARTS=
-#MAKEFILE#:4: foo.x: No such file or directory
 MAKE_RESTARTS=1
 blah.x
 all');
@@ -83,3 +81,7 @@ x.a: x.b ; @echo $?
 unlink(qw(x.a x.b));
 
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index 20b9f74..857b1cc 100644 (file)
@@ -42,8 +42,7 @@ foo.x: bar.x
 bar.x: ; echo >> $@
 baz.x: bar.x ; @echo "touch $@"
 ',
-              '', '#MAKEFILE#:3: foo.x: No such file or directory
-echo >> bar.x
+              '', 'echo >> bar.x
 touch foo.x
 restarts=1
 touch baz.x');
@@ -86,3 +85,7 @@ unlink(qw(y x-dir/x));
 rmdir('x-dir');
 
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index e784e0d..85dd0b0 100644 (file)
@@ -42,7 +42,7 @@ close(MAKEFILE);
                "$workdir${pathsep}command.h",
                "$workdir${pathsep}commands.c","$workdir${pathsep}display.c",
                "$workdir${pathsep}buffer.h",
-              "$workdir${pathsep}command.c");
+               "$workdir${pathsep}command.c");
 
 &touch(@files_to_touch);
 
@@ -92,8 +92,7 @@ close(MAKEFILE);
 &run_make_with_options($makefile2, "-k", &get_logfile, $error_code);
 
 $answer = "exit 1
-$makefile2:9: recipe for target 'foo.o' failed
-$make_name: *** [foo.o] Error 1
+$make_name: *** [$makefile2:9: foo.o] Error 1
 $make_name: Target 'all' not remade because of errors.\n";
 
 &compare_output($answer, &get_logfile(1));
index dfed419..02ae4a9 100644 (file)
@@ -92,7 +92,7 @@ EOF
 close(MAKEFILE);
 
 &run_make_with_options($topmake, '-n --no-print-directory', &get_logfile);
-$answer = "$make_path -f \"$submake\" bar\ntouch inc\necho n --no-print-directory\n";
+$answer = "$make_command -f \"$submake\" bar\ntouch inc\necho n --no-print-directory\n";
 &compare_output($answer, &get_logfile(1));
 
 unlink('inc');
index 194588d..e67b55d 100644 (file)
@@ -74,4 +74,13 @@ build-y: build-x
 ',
               '-q build-y', "#MAKE#: *** No rule to make target 'build-stamp-2', needed by 'build-arch'.  Stop.\n", 512);
 
+# TEST 9 : Savannah bug # 47151
+# Make sure we exit with 1 when invoking a recursive make
+run_make_test('
+foo: bar ; echo foo
+bar: ; @$(MAKE) -f #MAKEFILE# baz
+baz: ; echo baz
+',
+              '-q foo', '', 256);
+
 1;
index a05bbee..db762b2 100644 (file)
@@ -18,7 +18,7 @@ include foo
 all: ;@:
 foo: ; touch foo
 !,
-        "", "#MAKEFILE#:2: foo: No such file or directory\ntouch foo\n");
+        "", "touch foo\n");
 unlink('foo');
 
 # Test makefile rebuild with -w
@@ -27,7 +27,7 @@ include foo
 all: ;@:
 foo: ; touch foo
 !,
-        "-w", "#MAKE#: Entering directory '#PWD#'\n#MAKEFILE#:2: foo: No such file or directory\ntouch foo\n#MAKE#: Leaving directory '#PWD#'\n");
+        "-w", "#MAKE#: Entering directory '#PWD#'\ntouch foo\n#MAKE#: Leaving directory '#PWD#'\n");
 unlink('foo');
 
 1;
diff --git a/tests/scripts/targets/DELETE_ON_ERROR b/tests/scripts/targets/DELETE_ON_ERROR
new file mode 100644 (file)
index 0000000..db97093
--- /dev/null
@@ -0,0 +1,22 @@
+#! -*-perl-*-
+
+$description = "Test the behaviour of the .DELETE_ON_ERROR target.";
+
+$details = "";
+
+run_make_test('
+.DELETE_ON_ERROR:
+all: ; false > $@
+',
+              '', "false > all\n#MAKE#: *** [#MAKEFILE#:3: all] Error 1\n#MAKE#: *** Deleting file 'all'", 512);
+
+run_make_test('
+.DELETE_ON_ERROR:
+all: foo.x ;
+%.x : %.q ; echo > $@
+%.q : ; false > $@
+',
+              '', "false > foo.q\n#MAKE#: *** [#MAKEFILE#:5: foo.q] Error 1\n#MAKE#: *** Deleting file 'foo.q'", 512);
+
+# This tells the test driver that the perl test script executed properly.
+1;
index a24e3bc..5c3c7f8 100644 (file)
@@ -17,8 +17,7 @@ run_make_test(qq!
 .POSIX:
 all: ; \@$script
 !,
-              '', "#MAKEFILE#:3: recipe for target 'all' failed
-#MAKE#: *** [all] Error $err\n", 512);
+              '', "#MAKE#: *** [#MAKEFILE#:3: all] Error $err\n", 512);
 
 # User settings must override .POSIX
 $flags = '-xc';
index 8a5d0f6..0fac74a 100644 (file)
@@ -39,3 +39,7 @@ jump Works: MAKEFLAGS=e --no-print-directory
 print Works: MAKEFLAGS=e --no-print-directory');
 
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index ef8e368..01bf55e 100644 (file)
@@ -11,7 +11,6 @@ include foo.x
 foo.x: ; @touch $@
 ',
               '', 'MAKE_RESTARTS=
-#MAKEFILE#:4: foo.x: No such file or directory
 MAKE_RESTARTS=1');
 
 rmfiles('foo.x');
@@ -26,9 +25,7 @@ foo.x: ; @echo "include bar.x" > $@
 bar.x: ; @touch $@
 ',
               '', 'MAKE_RESTARTS=
-#MAKEFILE#:4: foo.x: No such file or directory
 MAKE_RESTARTS=1
-foo.x:1: bar.x: No such file or directory
 MAKE_RESTARTS=2');
 
 rmfiles('foo.x', 'bar.x');
@@ -47,9 +44,7 @@ foo.x: ; @echo "include bar.x" > $@
 bar.x: ; @touch $@
 ',
               '', "MAKE_RESTARTS=
-#MAKEFILE#:8: foo.x: No such file or directory
 MAKE_RESTARTS=1
-foo.x:1: bar.x: No such file or directory
 MAKE_RESTARTS=2
 recurse MAKE_RESTARTS=
 #MAKE#[1]: Entering directory '#PWD#'
@@ -60,3 +55,7 @@ all MAKE_RESTARTS=
 rmfiles('foo.x', 'bar.x');
 
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
index 1d01ba3..edba7b6 100644 (file)
@@ -97,7 +97,6 @@ run_make_test(qq!
 .SHELLFLAGS = $flags
 all: ; \@$script
 !,
-              '', "$out#MAKEFILE#:3: recipe for target 'all' failed
-#MAKE#: *** [all] Error $err\n", 512);
+              '', "$out#MAKE#: *** [#MAKEFILE#:3: all] Error $err\n", 512);
 
 1;
index a5ab93a..68f3128 100644 (file)
@@ -14,14 +14,22 @@ X2 := $(sort $(filter FOO BAR,$(.VARIABLES)))
 
 BAR := bar
 
-all:
-       @echo X1 = $(X1)
-       @echo X2 = $(X2)
-       @echo LAST = $(sort $(filter FOO BAR,$(.VARIABLES)))
+all: ; @echo X1 = $(X1); echo X2 = $(X2); echo LAST = $(sort $(filter FOO BAR,$(.VARIABLES)))
 ',
                '', "X1 =\nX2 = FOO\nLAST = BAR FOO\n");
 
+# SV 45728: Test that undefining a variable is reflected properly
 
+&run_make_test('
+FOO := foo
+BAR := bar
+$(info one: $(sort $(filter FOO BAR BAZ,$(.VARIABLES))))
+undefine BAR
+BAZ := baz
+$(info two: $(sort $(filter FOO BAR BAZ,$(.VARIABLES))))
+all:;@:
+',
+               '', "one: BAR FOO\ntwo: BAZ FOO\n");
 
 # $makefile2 = &get_tmpfile;
 # open(MAKEFILE, "> $makefile2");
@@ -31,9 +39,9 @@ all:
 # X1 := $(sort $(.TARGETS))
 
 # all: foo
-#      @echo X1 = $(X1)
-#      @echo X2 = $(X2)
-#      @echo LAST = $(sort $(.TARGETS))
+#      @echo X1 = $(X1)
+#      @echo X2 = $(X2)
+#      @echo LAST = $(sort $(.TARGETS))
 
 # X2 := $(sort $(.TARGETS))
 
diff --git a/tests/scripts/vms/library b/tests/scripts/vms/library
new file mode 100644 (file)
index 0000000..9a64951
--- /dev/null
@@ -0,0 +1,73 @@
+#                                                              -*-mode: perl-*-
+
+$description = "Test GNU make's VMS Library management features.";
+
+$details = "\
+This only works on VMS systems.";
+
+return -1 if $osname ne 'VMS';
+
+# Help library
+$mk_string = "help : help.hlb(file1.hlp)\n\n" .
+"file1.hlp :\n" .
+"\t\@pipe open/write xxx file1.hlp ; write xxx \"1 help\" ; close xxx\n";
+
+my $answer = "library /replace help.hlb file1.hlp";
+
+run_make_test($mk_string,
+              '', $answer);
+
+unlink('help.hlb');
+unlink('file1.hlp');
+
+#Text library
+$mk_string = "text : text.tlb(file1.txt)\n\n" .
+"file1.txt :\n" .
+"\t\@pipe open/write xxx file1.txt ; write xxx \"text file\" ; close xxx\n";
+
+my $answer = "library /replace text.tlb file1.txt";
+
+run_make_test($mk_string,
+              '', $answer);
+
+unlink('text.tlb');
+unlink('file1.txt');
+
+
+#Macro library
+$mk_string = "macro : macro.mlb(file1.mar)\n\n" .
+"file1.mar :\n" .
+"\t\pipe open/write xxx file1.mar ; " .
+"write xxx \".macro a b\" ; write xxx \".endm\" ; close xxx\n";
+
+my $answer = "library /replace macro.mlb file1.mar";
+
+run_make_test($mk_string,
+              '', $answer);
+
+unlink('macro.mlb');
+unlink('file1.mar');
+
+$mk_string =
+"all:imagelib.olb(file2.exe)\n" .
+"file2.exe : file2.obj file2.opt\n" .
+"\t\@link /share=\$\@ \$\*,\$\*/opt\n\n" .
+"file2.opt :\n" .
+"\t\@pipe open/write xxx file2.opt ; " .
+"write xxx \"CASE_SENSITIVE=YES\" ; close xxx\n" .
+"file2.c :\n" .
+"\t\@pipe open/write xxx file2.c ; write xxx \"file2(){}\" ; close xxx\n";
+
+my $answer = "library /replace imagelib.olb file2.exe";
+
+run_make_test($mk_string,
+              '', $answer);
+
+unlink('imagelib.olb');
+unlink('file2.c');
+unlink('file2.obj');
+unlink('file2.exe');
+unlink('file2.opt');
+
+# This tells the test driver that the perl test script executed properly.
+1;
index 91141eb..e6cd9f9 100644 (file)
@@ -5,7 +5,7 @@
 # Written 91-12-02 through 92-01-01 by Stephen McGee.
 # Modified 92-02-11 through 92-02-22 by Chris Arthur to further generalize.
 #
-# Copyright (C) 1991-2014 Free Software Foundation, Inc.
+# Copyright (C) 1991-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
index 01b6d89..36ab1f4 100644 (file)
@@ -1,5 +1,5 @@
 /* Internals of variables for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -29,6 +29,9 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #endif
 #include "hash.h"
 
+/* Incremented every time we add or remove a global variable.  */
+static unsigned long variable_changenum;
+
 /* Chain of all pattern-specific variables.  */
 
 static struct pattern_var *pattern_vars;
@@ -193,7 +196,7 @@ struct variable *
 define_variable_in_set (const char *name, unsigned int length,
                         const char *value, enum variable_origin origin,
                         int recursive, struct variable_set *set,
-                        const gmk_floc *flocp)
+                        const floc *flocp)
 {
   struct variable *v;
   struct variable **var_slot;
@@ -205,11 +208,39 @@ define_variable_in_set (const char *name, unsigned int length,
   var_key.name = (char *) name;
   var_key.length = length;
   var_slot = (struct variable **) hash_find_slot (&set->table, &var_key);
+  v = *var_slot;
+
+#ifdef VMS
+  /* VMS does not populate envp[] with DCL symbols and logical names which
+     historically are mapped to environent variables.
+     If the variable is not yet defined, then we need to check if getenv()
+     can find it.  Do not do this for origin == o_env to avoid infinte
+     recursion */
+  if (HASH_VACANT (v) && (origin != o_env))
+    {
+      struct variable * vms_variable;
+      char * vname = alloca (length + 1);
+      char * vvalue;
+
+      strncpy (vname, name, length);
+      vvalue = getenv(vname);
+
+      /* Values starting with '$' are probably foreign commands.
+         We want to treat them as Shell aliases and not look them up here */
+      if ((vvalue != NULL) && (vvalue[0] != '$'))
+        {
+          vms_variable =  lookup_variable(name, length);
+          /* Refresh the slot */
+          var_slot = (struct variable **) hash_find_slot (&set->table,
+                                                          &var_key);
+          v = *var_slot;
+        }
+    }
+#endif
 
   if (env_overrides && origin == o_env)
     origin = o_env_override;
 
-  v = *var_slot;
   if (! HASH_VACANT (v))
     {
       if (env_overrides && v->origin == o_env)
@@ -240,6 +271,9 @@ define_variable_in_set (const char *name, unsigned int length,
   v->name = xstrndup (name, length);
   v->length = length;
   hash_insert_at (&set->table, v, var_slot);
+  if (set == &global_variable_set)
+    ++variable_changenum;
+
   v->value = xstrdup (value);
   if (flocp != 0)
     v->fileinfo = *flocp;
@@ -322,12 +356,15 @@ undefine_variable_in_set (const char *name, unsigned int length,
            before the switches were parsed, it wasn't affected by -e.  */
         v->origin = o_env_override;
 
-      /* If the definition is from a stronger source than this one, don't
-         undefine it.  */
+      /* Undefine only if this undefinition is from an equal or stronger
+         source than the variable definition.  */
       if ((int) origin >= (int) v->origin)
         {
           hash_delete_at (&set->table, var_slot);
           free_variable_name_and_value (v);
+          free (v);
+          if (set == &global_variable_set)
+            ++variable_changenum;
         }
     }
 }
@@ -345,7 +382,7 @@ undefine_variable_in_set (const char *name, unsigned int length,
 static struct variable *
 lookup_special_var (struct variable *var)
 {
-  static unsigned long last_var_count = 0;
+  static unsigned long last_changenum = 0;
 
 
   /* This one actually turns out to be very hard, due to the way the parser
@@ -373,8 +410,7 @@ lookup_special_var (struct variable *var)
   else
   */
 
-  if (streq (var->name, ".VARIABLES")
-      && global_variable_set.table.ht_fill != last_var_count)
+  if (variable_changenum != last_changenum && streq (var->name, ".VARIABLES"))
     {
       unsigned long max = EXPANSION_INCREMENT (strlen (var->value));
       unsigned long len;
@@ -410,11 +446,8 @@ lookup_special_var (struct variable *var)
           }
       *(p-1) = '\0';
 
-      /* Remember how many variables are in our current count.  Since we never
-         remove variables from the list, this is a reliable way to know whether
-         the list is up to date or needs to be recomputed.  */
-
-      last_var_count = global_variable_set.table.ht_fill;
+      /* Remember the current variable change number.  */
+      last_changenum = variable_changenum;
     }
 
   return var;
@@ -450,8 +483,8 @@ lookup_variable (const char *name, unsigned int length)
     }
 
 #ifdef VMS
-  /* since we don't read envp[] on startup, try to get the
-     variable via getenv() here.  */
+  /* VMS does not populate envp[] with DCL symbols and logical names which
+     historically are mapped to enviroment varables and returned by getenv() */
   {
     char *vname = alloca (length + 1);
     char *value;
@@ -725,6 +758,8 @@ merge_variable_sets (struct variable_set *to_set,
   struct variable **from_var_slot = (struct variable **) from_set->table.ht_vec;
   struct variable **from_var_end = from_var_slot + from_set->table.ht_size;
 
+  int inc = to_set == &global_variable_set ? 1 : 0;
+
   for ( ; from_var_slot < from_var_end; from_var_slot++)
     if (! HASH_VACANT (*from_var_slot))
       {
@@ -732,7 +767,10 @@ merge_variable_sets (struct variable_set *to_set,
         struct variable **to_var_slot
           = (struct variable **) hash_find_slot (&to_set->table, *from_var_slot);
         if (HASH_VACANT (*to_var_slot))
-          hash_insert_at (&to_set->table, from_var, to_var_slot);
+          {
+            hash_insert_at (&to_set->table, from_var, to_var_slot);
+            variable_changenum += inc;
+          }
         else
           {
             /* GKM FIXME: delete in from_set->table */
@@ -784,7 +822,6 @@ merge_variable_set_lists (struct variable_set_list **setlist0,
 void
 define_automatic_variables (void)
 {
-  extern const char* default_shell;
   struct variable *v;
   char buf[200];
 
@@ -900,15 +937,7 @@ define_automatic_variables (void)
   /* Define the magic D and F variables in terms of
      the automatic variables they are variations of.  */
 
-#ifdef VMS
-  define_variable_cname ("@D", "$(dir $@)", o_automatic, 1);
-  define_variable_cname ("%D", "$(dir $%)", o_automatic, 1);
-  define_variable_cname ("*D", "$(dir $*)", o_automatic, 1);
-  define_variable_cname ("<D", "$(dir $<)", o_automatic, 1);
-  define_variable_cname ("?D", "$(dir $?)", o_automatic, 1);
-  define_variable_cname ("^D", "$(dir $^)", o_automatic, 1);
-  define_variable_cname ("+D", "$(dir $+)", o_automatic, 1);
-#elif defined(__MSDOS__) || defined(WINDOWS32)
+#if defined(__MSDOS__) || defined(WINDOWS32)
   /* For consistency, remove the trailing backslash as well as slash.  */
   define_variable_cname ("@D", "$(patsubst %/,%,$(patsubst %\\,%,$(dir $@)))",
                          o_automatic, 1);
@@ -1019,7 +1048,6 @@ target_environment (struct file *file)
                   /* If this is the SHELL variable and it's not exported,
                      then add the value from our original environment, if
                      the original environment defined a value for SHELL.  */
-                  extern struct variable shell_var;
                   if (streq (v->name, "SHELL") && shell_var.value)
                     {
                       v = &shell_var;
@@ -1040,7 +1068,7 @@ target_environment (struct file *file)
           }
     }
 
-  makelevel_key.name = xstrdup (MAKELEVEL_NAME);
+  makelevel_key.name = (char *)MAKELEVEL_NAME;
   makelevel_key.length = MAKELEVEL_LENGTH;
   hash_delete (&table, &makelevel_key);
 
@@ -1106,7 +1134,7 @@ set_special_var (struct variable *var)
  * result. This removes only ONE newline (if any) at the end, for maximum
  * compatibility with the *BSD makes.  If it fails, returns NULL. */
 
-char *
+static char *
 shell_result (const char *p)
 {
   char *buf;
@@ -1129,7 +1157,7 @@ shell_result (const char *p)
    See the try_variable_definition() function for details on the parameters. */
 
 struct variable *
-do_variable_definition (const gmk_floc *flocp, const char *varname,
+do_variable_definition (const floc *flocp, const char *varname,
                         const char *value, enum variable_origin origin,
                         enum variable_flavor flavor, int target_var)
 {
@@ -1402,7 +1430,7 @@ parse_variable_definition (const char *p, struct variable *var)
   int wspace = 0;
   const char *e = NULL;
 
-  p = next_token (p);
+  NEXT_TOKEN (p);
   var->name = (char *)p;
   var->length = 0;
 
@@ -1419,38 +1447,40 @@ parse_variable_definition (const char *p, struct variable *var)
           /* This begins a variable expansion reference.  Make sure we don't
              treat chars inside the reference as assignment tokens.  */
           char closeparen;
-          int count;
+          unsigned int count;
+
           c = *p++;
           if (c == '(')
             closeparen = ')';
           else if (c == '{')
             closeparen = '}';
+          else if (c == '\0')
+            return NULL;
           else
             /* '$$' or '$X'.  Either way, nothing special to do here.  */
             continue;
 
           /* P now points past the opening paren or brace.
              Count parens or braces until it is matched.  */
-          count = 0;
-          for (; *p != '\0'; ++p)
+          for (count = 1; *p != '\0'; ++p)
             {
-              if (*p == c)
-                ++count;
-              else if (*p == closeparen && --count < 0)
+              if (*p == closeparen && --count == 0)
                 {
                   ++p;
                   break;
                 }
+              if (*p == c)
+                ++count;
             }
           continue;
         }
 
       /* If we find whitespace skip it, and remember we found it.  */
-      if (isblank ((unsigned char)c))
+      if (ISBLANK (c))
         {
           wspace = 1;
           e = p - 1;
-          p = next_token (p);
+          NEXT_TOKEN (p);
           c = *p;
           if (c == '\0')
             return NULL;
@@ -1562,7 +1592,7 @@ assign_variable_definition (struct variable *v, const char *line)
    returned.  */
 
 struct variable *
-try_variable_definition (const gmk_floc *flocp, const char *line,
+try_variable_definition (const floc *flocp, const char *line,
                          enum variable_origin origin, int target_var)
 {
   struct variable v;
@@ -1626,7 +1656,7 @@ print_variable (const void *item, void *arg)
     fputs (" private", stdout);
   if (v->fileinfo.filenm)
     printf (_(" (from '%s', line %lu)"),
-            v->fileinfo.filenm, v->fileinfo.lineno);
+            v->fileinfo.filenm, v->fileinfo.lineno + v->fileinfo.offset);
   putchar ('\n');
   fputs (prefix, stdout);
 
@@ -1707,7 +1737,7 @@ print_variable_data_base (void)
 
   {
     struct pattern_var *p;
-    int rules = 0;
+    unsigned int rules = 0;
 
     for (p = pattern_vars; p != 0; p = p->next)
       {
index fa2dbbd..fe1d609 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for using variables in GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -51,7 +51,7 @@ struct variable
   {
     char *name;                 /* Variable name.  */
     char *value;                /* Variable value.  */
-    gmk_floc fileinfo;          /* Where the variable was defined.  */
+    floc fileinfo;              /* Where the variable was defined.  */
     int length;                 /* strlen (name) */
     unsigned int recursive:1;   /* Gets recursively re-evaluated.  */
     unsigned int append:1;      /* Nonzero if an appending target-specific
@@ -110,6 +110,7 @@ struct pattern_var
 extern char *variable_buffer;
 extern struct variable_set_list *current_variable_set_list;
 extern struct variable *default_goal_var;
+extern struct variable shell_var;
 
 /* expand.c */
 char *variable_buffer_output (char *ptr, const char *string, unsigned int length);
@@ -134,7 +135,7 @@ char *patsubst_expand_pat (char *o, const char *text, const char *pattern,
                            const char *replace_percent);
 char *patsubst_expand (char *o, const char *text, char *pattern, char *replace);
 char *func_shell_base (char *o, char **argv, int trim_newlines);
-
+void shell_completed (int exit_code, int exit_sig);
 
 /* expand.c */
 char *recursively_expand_for_file (struct variable *v, struct file *file);
@@ -148,11 +149,10 @@ void pop_variable_scope (void);
 void define_automatic_variables (void);
 void initialize_file_variables (struct file *file, int reading);
 void print_file_variables (const struct file *file);
-void print_file_variables (const struct file *file);
 void print_target_variables (const struct file *file);
 void merge_variable_set_lists (struct variable_set_list **to_list,
                                struct variable_set_list *from_list);
-struct variable *do_variable_definition (const gmk_floc *flocp,
+struct variable *do_variable_definition (const floc *flocp,
                                          const char *name, const char *value,
                                          enum variable_origin origin,
                                          enum variable_flavor flavor,
@@ -160,12 +160,12 @@ struct variable *do_variable_definition (const gmk_floc *flocp,
 char *parse_variable_definition (const char *line,
                                  struct variable *v);
 struct variable *assign_variable_definition (struct variable *v, const char *line);
-struct variable *try_variable_definition (const gmk_floc *flocp, const char *line,
+struct variable *try_variable_definition (const floc *flocp, const char *line,
                                           enum variable_origin origin,
                                           int target_var);
 void init_hash_global_variable_set (void);
 void hash_init_function_table (void);
-void define_new_function(const gmk_floc *flocp, const char *name,
+void define_new_function(const floc *flocp, const char *name,
                          unsigned int min, unsigned int max, unsigned int flags,
                          gmk_func_ptr func);
 struct variable *lookup_variable (const char *name, unsigned int length);
@@ -177,7 +177,7 @@ struct variable *define_variable_in_set (const char *name, unsigned int length,
                                          enum variable_origin origin,
                                          int recursive,
                                          struct variable_set *set,
-                                         const gmk_floc *flocp);
+                                         const floc *flocp);
 
 /* Define a variable in the current variable set.  */
 
index d94ecec..e6d822d 100644 (file)
--- a/version.c
+++ b/version.c
@@ -1,5 +1,5 @@
 /* Record version and build host architecture for GNU make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
diff --git a/vms_exit.c b/vms_exit.c
new file mode 100644 (file)
index 0000000..b08d84d
--- /dev/null
@@ -0,0 +1,95 @@
+/* vms_exit.c
+ *
+ * Wrapper for the VMS exit() command to tranlate UNIX codes to be
+ * encoded for POSIX, but also have VMS severity levels.
+ * The posix_exit() variant only sets a severity level for status code 1.
+ *
+ * Author: John E. Malmberg
+ */
+
+/* Copyright (C) 2014-2016 Free Software Foundation, Inc.
+
+GNU Make is free software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 3 of the License, or (at your option) any later
+version.
+
+GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+
+/* Per copyright assignment agreement with the Free Software Foundation
+   this software may be available under under other license agreements
+   and copyrights. */
+
+#include <makeint.h>
+
+#include <stsdef.h>
+void
+decc$exit (int status);
+#ifndef C_FACILITY_NO
+# define C_FACILITY_NO 0x350000
+#endif
+
+/* Lowest legal non-success VMS exit code is 8 */
+/* GNU make only defines codes 0, 1, 2 */
+/* So assume any exit code > 8 is a VMS exit code */
+
+#ifndef MAX_EXPECTED_EXIT_CODE
+# define MAX_EXPECTED_EXIT_CODE 7
+#endif
+
+/* Build a Posix Exit with VMS severity */
+void
+vms_exit (int status)
+{
+  int vms_status;
+  /* Fake the __posix_exit with severity added */
+  /* Undocumented correct way to do this. */
+  vms_status = 0;
+
+  /* The default DECC definition is not compatible with doing a POSIX_EXIT */
+  /* So fix it. */
+  if (status == EXIT_FAILURE)
+    status = MAKE_FAILURE;
+
+  /* Trivial case exit success */
+  if (status == 0)
+    decc$exit (STS$K_SUCCESS);
+
+  /* Is this a VMS status then just take it */
+  if (status > MAX_EXPECTED_EXIT_CODE)
+    {
+      /* Make sure that the message inhibit is set since message has */
+      /* already been displayed. */
+      vms_status = status | STS$M_INHIB_MSG;
+      decc$exit (vms_status);
+    }
+
+  /* Unix status codes are limited to 1 byte, so anything larger */
+  /* is a probably a VMS exit code and needs to be passed through */
+  /* A lower value can be set for a macro. */
+  /* Status 0 is always passed through as it is converted to SS$_NORMAL */
+  /* Always set the message inhibit bit */
+  vms_status = C_FACILITY_NO | 0xA000 | STS$M_INHIB_MSG;
+  vms_status |= (status << 3);
+
+  /* STS$K_ERROR is for status that stops makefile that a simple */
+  /* Rerun of the makefile will not fix. */
+
+  if (status == MAKE_FAILURE)
+    vms_status |= STS$K_ERROR;
+  else if (status == MAKE_TROUBLE)
+    {
+      /* Make trouble is for when make was told to do nothing and */
+      /* found that a target was not up to date.  Since a second */
+      /* of make will produce the same condition, this is of */
+      /* Error severity */
+      vms_status |= STS$K_ERROR;
+    }
+  decc$exit (vms_status);
+}
diff --git a/vms_export_symbol.c b/vms_export_symbol.c
new file mode 100644 (file)
index 0000000..954f3f4
--- /dev/null
@@ -0,0 +1,527 @@
+/* File: vms_export_symbol.c
+ *
+ * Some programs need special environment variables deported as DCL
+ * DCL symbols.
+ */
+
+/* Copyright (C) 2014-2016 Free Software Foundation, Inc.
+
+GNU Make is free software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 3 of the License, or (at your option) any later
+version.
+
+GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+
+/* Per copyright assignment agreement with the Free Software Foundation
+   this software may be available under under other license agreements
+   and copyrights. */
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include <descrip.h>
+#include <stsdef.h>
+#include <ssdef.h>
+#include <unixlib.h>
+#include <libclidef.h>
+
+#pragma member_alignment save
+#pragma nomember_alignment longword
+struct item_list_3
+{
+  unsigned short len;
+  unsigned short code;
+  void * bufadr;
+  unsigned short * retlen;
+};
+
+
+#pragma member_alignment
+
+int
+LIB$GET_SYMBOL (const struct dsc$descriptor_s * symbol,
+                struct dsc$descriptor_s * value,
+                unsigned short * value_len,
+                const unsigned long * table);
+
+int
+LIB$SET_SYMBOL (const struct dsc$descriptor_s * symbol,
+                const struct dsc$descriptor_s * value,
+                const unsigned long * table);
+
+int
+LIB$DELETE_SYMBOL (const struct dsc$descriptor_s * symbol,
+                   const unsigned long * table);
+
+#define MAX_DCL_SYMBOL_LEN (255)
+#if __CRTL_VER >= 70302000 && !defined(__VAX)
+# define MAX_DCL_SYMBOL_VALUE (8192)
+#else
+# define MAX_DCL_SYMBOL_VALUE (1024)
+#endif
+
+struct dcl_symbol
+{
+  struct dcl_symbol * link;
+  struct dsc$descriptor_s name_desc;
+  struct dsc$descriptor_s value_desc;
+  char name[MAX_DCL_SYMBOL_LEN + 1];    /* + 1 byte for null terminator */
+  char value[MAX_DCL_SYMBOL_VALUE +1];  /* + 1 byte for null terminator */
+  char pad[3]; /* Pad structure to longword allignment */
+};
+
+static struct dcl_symbol * vms_dcl_symbol_head = NULL;
+
+/* Restore symbol state to original condition. */
+static unsigned long
+clear_dcl_symbol (struct dcl_symbol * symbol)
+{
+
+  const unsigned long symtbl = LIB$K_CLI_LOCAL_SYM;
+  int status;
+
+  if (symbol->value_desc.dsc$w_length == (unsigned short)-1)
+    status = LIB$DELETE_SYMBOL (&symbol->name_desc, &symtbl);
+  else
+    status = LIB$SET_SYMBOL (&symbol->name_desc,
+                             &symbol->value_desc, &symtbl);
+  return status;
+}
+
+
+/* Restore all exported symbols to their original conditions */
+static void
+clear_exported_symbols (void)
+{
+
+  struct dcl_symbol * symbol;
+
+  symbol = vms_dcl_symbol_head;
+
+  /* Walk the list of symbols.  This is done durring exit,
+   * so no need to free memory.
+   */
+  while (symbol != NULL)
+  {
+    clear_dcl_symbol (symbol);
+    symbol = symbol->link;
+  }
+
+}
+
+
+/* Restore the symbol back to the original value
+ * symbol name is either a plain name or of the form "symbol=name" where
+ * the name portion is ignored.
+ */
+void
+vms_restore_symbol (const char * string)
+{
+
+  struct dcl_symbol * symbol;
+  char name[MAX_DCL_SYMBOL_LEN + 1];
+  int status;
+  char * value;
+  int name_len;
+
+  symbol = vms_dcl_symbol_head;
+
+  /* Isolate the name from the value */
+  value = strchr (string, '=');
+  if (value != NULL)
+    {
+      /* Copy the name from the string */
+      name_len = (value - string);
+    }
+  else
+    name_len = strlen (string);
+
+  if (name_len > MAX_DCL_SYMBOL_LEN)
+    name_len = MAX_DCL_SYMBOL_LEN;
+
+  strncpy (name, string, name_len);
+  name[name_len] = 0;
+
+  /* Walk the list of symbols.  The saved symbol is not freed
+   * symbols are likely to be overwritten multiple times, so this
+   * saves time in saving them each time.
+   */
+  while (symbol != NULL)
+    {
+      int result;
+      result = strcmp (symbol->name, name);
+      if (result == 0)
+        {
+          clear_dcl_symbol (symbol);
+          break;
+        }
+      symbol = symbol->link;
+    }
+}
+
+int
+vms_export_dcl_symbol (const char * name, const char * value)
+{
+
+  struct dcl_symbol * symbol;
+  struct dcl_symbol * next;
+  struct dcl_symbol * link;
+  int found;
+  const unsigned long symtbl = LIB$K_CLI_LOCAL_SYM;
+  struct dsc$descriptor_s value_desc;
+  int string_len;
+  int status;
+  char new_value[MAX_DCL_SYMBOL_VALUE + 1];
+  char * dollarp;
+
+  next = vms_dcl_symbol_head;
+  link = vms_dcl_symbol_head;
+
+  /* Is symbol already exported? */
+  found = 0;
+  while ((found == 0) && (link != NULL))
+    {
+      int x;
+      found = !strncasecmp (link->name, name, MAX_DCL_SYMBOL_LEN);
+      if (found)
+        symbol = link;
+      next = link;
+      link = link->link;
+    }
+
+  /* New symbol, set it up */
+  if (found == 0)
+    {
+      symbol = malloc (sizeof (struct dcl_symbol));
+      if (symbol == NULL)
+        return SS$_INSFMEM;
+
+      /* Construct the symbol descriptor, used for both saving
+       * the old symbol and creating the new symbol.
+       */
+      symbol->name_desc.dsc$w_length = strlen (name);
+      if (symbol->name_desc.dsc$w_length > MAX_DCL_SYMBOL_LEN)
+        symbol->name_desc.dsc$w_length = MAX_DCL_SYMBOL_LEN;
+
+      strncpy (symbol->name, name, symbol->name_desc.dsc$w_length);
+      symbol->name[symbol->name_desc.dsc$w_length] = 0;
+      symbol->name_desc.dsc$a_pointer = symbol->name;
+      symbol->name_desc.dsc$b_dtype = DSC$K_DTYPE_T;
+      symbol->name_desc.dsc$b_class = DSC$K_CLASS_S;
+
+      /* construct the value descriptor, used only for saving
+       * the old symbol.
+       */
+      symbol->value_desc.dsc$a_pointer = symbol->value;
+      symbol->value_desc.dsc$w_length = MAX_DCL_SYMBOL_VALUE;
+      symbol->value_desc.dsc$b_dtype = DSC$K_DTYPE_T;
+      symbol->value_desc.dsc$b_class = DSC$K_CLASS_S;
+    }
+
+  if (found == 0)
+    {
+      unsigned long old_symtbl;
+      unsigned short value_len;
+
+      /* Look up the symbol */
+      status = LIB$GET_SYMBOL (&symbol->name_desc, &symbol->value_desc,
+                               &value_len, &old_symtbl);
+      if (!$VMS_STATUS_SUCCESS (status))
+        value_len = (unsigned short)-1;
+      else if (old_symtbl != symtbl)
+        value_len = (unsigned short)-1;
+
+      symbol->value_desc.dsc$w_length = value_len;
+
+      /* Store it away */
+      if (value_len != (unsigned short) -1)
+        symbol->value[value_len] = 0;
+
+      /* Make sure atexit scheduled */
+      if (vms_dcl_symbol_head == NULL)
+        {
+          vms_dcl_symbol_head = symbol;
+          atexit (clear_exported_symbols);
+        }
+      else
+        {
+          /* Extend the chain */
+          next->link = symbol;
+        }
+    }
+
+  /* Create or replace a symbol */
+  value_desc.dsc$a_pointer = new_value;
+  string_len = strlen (value);
+  if (string_len > MAX_DCL_SYMBOL_VALUE)
+    string_len = MAX_DCL_SYMBOL_VALUE;
+
+  strncpy (new_value, value, string_len);
+  new_value[string_len] = 0;
+
+  /* Special handling for GNU Make.  GNU Make doubles the dollar signs
+   * in environment variables read in from getenv().  Make exports symbols
+   * with the dollar signs already doubled.  So all $$ must be converted
+   * back to $.
+   * If the first $ is not doubled, then do not convert at all.
+   */
+  dollarp = strchr (new_value, '$');
+  while (dollarp && dollarp[1] == '$')
+    {
+      int left;
+      dollarp++;
+      left = string_len - (dollarp - new_value - 1);
+      string_len--;
+      if (left > 0)
+        {
+          memmove (dollarp, &dollarp[1], left);
+          dollarp = strchr (&dollarp[1], '$');
+        }
+      else
+        {
+          /* Ended with $$, simple case */
+          dollarp[1] = 0;
+          break;
+        }
+    }
+  value_desc.dsc$w_length = string_len;
+  value_desc.dsc$b_dtype = DSC$K_DTYPE_T;
+  value_desc.dsc$b_class = DSC$K_CLASS_S;
+  status = LIB$SET_SYMBOL (&symbol->name_desc, &value_desc, &symtbl);
+  return status;
+}
+
+/* export a DCL symbol using a string in the same syntax as putenv */
+int
+vms_putenv_symbol (const char * string)
+{
+
+  char name[MAX_DCL_SYMBOL_LEN + 1];
+  int status;
+  char * value;
+  int name_len;
+
+  /* Isolate the name from the value */
+  value = strchr (string, '=');
+  if (value == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  /* Copy the name from the string */
+  name_len = (value - string);
+  if (name_len > MAX_DCL_SYMBOL_LEN)
+    name_len = MAX_DCL_SYMBOL_LEN;
+
+  strncpy (name, string, name_len);
+  name[name_len] = 0;
+
+  /* Skip past the "=" */
+  value++;
+
+  /* Export the symbol */
+  status = vms_export_dcl_symbol (name, value);
+
+  /* Convert the error to Unix format */
+  if (!$VMS_STATUS_SUCCESS (status))
+    {
+      errno = EVMSERR;
+      vaxc$errno = status;
+      return -1;
+    }
+  return 0;
+}
+
+#if __CRTL_VER >= 70301000
+# define transpath_parm transpath
+#else
+static char transpath[MAX_DCL_SYMBOL_VALUE];
+#endif
+
+/* Helper callback routine for converting Unix paths to VMS */
+static int
+to_vms_action (char * vms_spec, int flag, char * transpath_parm)
+{
+  strncpy (transpath, vms_spec, MAX_DCL_SYMBOL_VALUE - 1);
+  transpath[MAX_DCL_SYMBOL_VALUE - 1] = 0;
+  return 0;
+}
+
+#ifdef __DECC
+# pragma message save
+  /* Undocumented extra parameter use triggers a ptrmismatch warning */
+# pragma message disable ptrmismatch
+#endif
+
+/* Create a foreign command only visible to children */
+int
+create_foreign_command (const char * command, const char * image)
+{
+  char vms_command[MAX_DCL_SYMBOL_VALUE + 1];
+  int status;
+
+  vms_command[0] = '$';
+  vms_command[1] = 0;
+  if (image[0] == '/')
+    {
+#if __CRTL_VER >= 70301000
+      /* Current decc$to_vms is reentrant */
+      decc$to_vms (image, to_vms_action, 0, 1, &vms_command[1]);
+#else
+      /* Older decc$to_vms is not reentrant */
+      decc$to_vms (image, to_vms_action, 0, 1);
+      strncpy (&vms_command[1], transpath, MAX_DCL_SYMBOL_VALUE - 1);
+      vms_command[MAX_DCL_SYMBOL_VALUE] = 0;
+#endif
+    }
+  else
+    {
+      strncpy (&vms_command[1], image, MAX_DCL_SYMBOL_VALUE - 1);
+      vms_command[MAX_DCL_SYMBOL_VALUE] = 0;
+    }
+  status = vms_export_dcl_symbol (command, vms_command);
+
+  return status;
+}
+#ifdef __DECC
+# pragma message restore
+#endif
+
+
+#ifdef DEBUG
+
+int
+main(int argc, char ** argv, char **env)
+{
+
+  char value[MAX_DCL_SYMBOL_VALUE +1];
+  int status = 0;
+  int putenv_status;
+  int vms_status;
+  struct dsc$descriptor_s name_desc;
+  struct dsc$descriptor_s value_desc;
+  const unsigned long symtbl = LIB$K_CLI_LOCAL_SYM;
+  unsigned short value_len;
+  unsigned long old_symtbl;
+  int result;
+  const char * vms_command = "vms_export_symbol";
+  const char * vms_image = "test_image.exe";
+  const char * vms_symbol1 = "test_symbol1";
+  const char * value1 = "test_value1";
+  const char * vms_symbol2 = "test_symbol2";
+  const char * putenv_string = "test_symbol2=value2";
+  const char * value2 = "value2";
+
+  /* Test creating a foreign command */
+  vms_status = create_foreign_command (vms_command, vms_image);
+  if (!$VMS_STATUS_SUCCESS (vms_status))
+    {
+      printf("Create foreign command failed: %d\n", vms_status);
+      status = 1;
+    }
+
+  name_desc.dsc$a_pointer = (char *)vms_command;
+  name_desc.dsc$w_length = strlen (vms_command);
+  name_desc.dsc$b_dtype = DSC$K_DTYPE_T;
+  name_desc.dsc$b_class = DSC$K_CLASS_S;
+
+  value_desc.dsc$a_pointer = value;
+  value_desc.dsc$w_length = MAX_DCL_SYMBOL_VALUE;
+  value_desc.dsc$b_dtype = DSC$K_DTYPE_T;
+  value_desc.dsc$b_class = DSC$K_CLASS_S;
+
+  vms_status = LIB$GET_SYMBOL (&name_desc, &value_desc,
+                               &value_len, &old_symtbl);
+  if (!$VMS_STATUS_SUCCESS (vms_status))
+    {
+      printf ("lib$get_symbol for command failed: %d\n", vms_status);
+      status = 1;
+    }
+
+  value[value_len] = 0;
+  result = strncasecmp (&value[1], vms_image, value_len - 1);
+  if (result != 0)
+    {
+      printf ("create_foreign_command failed!  expected '%s', got '%s'\n",
+              vms_image, &value[1]);
+      status = 1;
+    }
+
+  /* Test exporting a symbol */
+  vms_status = vms_export_dcl_symbol (vms_symbol1, value1);
+  if (!$VMS_STATUS_SUCCESS (vms_status))
+    {
+      printf ("vms_export_dcl_symbol for command failed: %d\n", vms_status);
+      status = 1;
+    }
+
+  name_desc.dsc$a_pointer = (char *)vms_symbol1;
+  name_desc.dsc$w_length = strlen (vms_symbol1);
+  vms_status = LIB$GET_SYMBOL(&name_desc, &value_desc,
+                              &value_len, &old_symtbl);
+  if (!$VMS_STATUS_SUCCESS(vms_status))
+    {
+      printf ("lib$get_symbol for command failed: %d\n", vms_status);
+      status = 1;
+    }
+
+  value[value_len] = 0;
+  result = strncmp (value, value1, value_len);
+  if (result != 0)
+    {
+      printf ("vms_export_dcl_symbol failed!  expected '%s', got '%s'\n",
+              value1, value);
+      status = 1;
+    }
+
+  /* Test putenv for DCL symbols */
+  putenv_status = vms_putenv_symbol (putenv_string);
+  if (putenv_status != 0)
+    {
+      perror ("vms_putenv_symbol");
+      status = 1;
+    }
+
+  name_desc.dsc$a_pointer = (char *)vms_symbol2;
+  name_desc.dsc$w_length = strlen(vms_symbol2);
+  vms_status = LIB$GET_SYMBOL (&name_desc, &value_desc,
+                               &value_len, &old_symtbl);
+  if (!$VMS_STATUS_SUCCESS (vms_status))
+    {
+      printf ("lib$get_symbol for command failed: %d\n", vms_status);
+      status = 1;
+    }
+
+  value[value_len] = 0;
+  result = strncmp (value, value2, value_len);
+  if (result != 0)
+  {
+    printf ("vms_putenv_symbol failed!  expected '%s', got '%s'\n",
+            value2, value);
+    status = 1;
+  }
+
+  vms_restore_symbol (putenv_string);
+  vms_status = LIB$GET_SYMBOL (&name_desc, &value_desc,
+                               &value_len, &old_symtbl);
+  if ($VMS_STATUS_SUCCESS (vms_status))
+    {
+      printf ("lib$get_symbol for command succeeded, should have failed\n");
+      status = 1;
+    }
+
+  exit (status);
+}
+
+#endif
diff --git a/vms_export_symbol_test.com b/vms_export_symbol_test.com
new file mode 100644 (file)
index 0000000..4345f44
--- /dev/null
@@ -0,0 +1,37 @@
+$! VMS_EXPORT_SYMBOL_TEST.COM
+$!
+$! Verify the VMS_EXPORT_SYMBOL.C module
+$!
+$! 22-May-2014   J. Malmberg
+$!
+$!=========================================================================
+$!
+$ cc/names=(as_is)/define=(DEBUG=1,_POSIX_EXIT=1) vms_export_symbol.c
+$!
+$ link vms_export_symbol
+$!
+$ delete vms_export_symbol.obj;*
+$!
+$! Need a foreign command to test.
+$ vms_export_symbol := $sys$disk:[]vms_export_symbol.exe
+$ save_export_symbol = vms_export_symbol
+$!
+$ vms_export_symbol
+$ if $severity .ne. 1
+$ then
+$    write sys$output "Test program failed!";
+$ endif
+$!
+$ if vms_export_symbol .nes. save_export_symbol
+$ then
+$   write sys$output "Test failed to restore foreign command!"
+$ endif
+$ if f$type(test_export_symbol) .nes. ""
+$ then
+$   write sys$output "Test failed to clear exported symbol!"
+$ endif
+$ if f$type(test_putenv_symbol) .nes. ""
+$ then
+$   write sys$output "Test failed to clear putenv exported symbol!"
+$ endif
+$!
diff --git a/vms_progname.c b/vms_progname.c
new file mode 100644 (file)
index 0000000..0665a54
--- /dev/null
@@ -0,0 +1,463 @@
+/* File: vms_progname.c
+ *
+ * This module provides a fixup of the program name.
+ *
+ * This module is designed to be a plug in replacement for the
+ * progname module used by many GNU utilities with a few enhancements
+ * needed for GNU Make.
+ *
+ * It does not support the HAVE_DECL_PROGRAM_INVOCATION_* macros at this
+ * time.
+ *
+ * Make sure that the program_name string is set as close as possible to
+ *    what the original command was given.
+ *
+ * When run from DCL, The argv[0] element is initialized with an absolute
+ * path name.  The decc$ feature logical names can control the format
+ * of this pathname.  In some cases it causes the UNIX format name to be
+ * formatted incorrectly.
+ *
+ * This DCL provided name is usually incompatible with what is expected to
+ * be provided by Unix programs and needs to be replaced.
+ *
+ * When run from an exec() call, the argv[0] element is initialized by the
+ * program.  This name is compatible with what is expected to be provided
+ * by Unix programs and should be passed through unchanged.
+ *
+ * The DCL provided name can be detected because it always contains the
+ * device name.
+ *
+ * DCL examples:
+ *    devname:[dir]program.exe;1         Normal VMS - remove path and .EXE;n
+ *    devname:[dir]facility$program.exe;1   Facility also needs removal.
+ *    /devname/dir/program.exe
+ *    /DISK$VOLUME/dir/program.exe.1     Bug version should not be there.
+ *    /DISK$VOLUME/dir/program.          Bug Period should not be there.
+ *
+ */
+
+/* Copyright (C) 2014-2016 Free Software Foundation, Inc.
+
+GNU Make is free software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 3 of the License, or (at your option) any later
+version.
+
+GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+
+/* Per copyright assignment agreement with the Free Software Foundation
+   this software may be available under under other license agreements
+   and copyrights. */
+
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+#include <descrip.h>
+#include <dvidef.h>
+#include <efndef.h>
+#include <fscndef.h>
+#include <stsdef.h>
+
+#ifdef USE_PROGNAME_H
+# include "progname.h"
+#endif
+
+#pragma member_alignment save
+#pragma nomember_alignment longword
+struct item_list_3
+{
+  unsigned short len;
+  unsigned short code;
+  void * bufadr;
+  unsigned short * retlen;
+};
+
+struct filescan_itmlst_2
+{
+  unsigned short length;
+  unsigned short itmcode;
+  char * component;
+};
+
+#pragma member_alignment
+
+int
+SYS$GETDVIW (unsigned long efn,
+             unsigned short chan,
+             const struct dsc$descriptor_s * devnam,
+             const struct item_list_3 * itmlst,
+             void * iosb,
+             void (* astadr)(unsigned long),
+             unsigned long astprm,
+             void * nullarg);
+
+int
+SYS$FILESCAN (const struct dsc$descriptor_s * srcstr,
+              struct filescan_itmlst_2 * valuelist,
+              unsigned long * fldflags,
+              struct dsc$descriptor_s *auxout,
+              unsigned short * retlen);
+
+/* String containing name the program is called with.
+   To be initialized by main().  */
+
+const char *program_name = NULL;
+
+static int internal_need_vms_symbol = 0;
+
+static char vms_new_nam[256];
+
+int
+need_vms_symbol (void)
+{
+  return internal_need_vms_symbol;
+}
+
+
+void
+set_program_name (const char *argv0)
+{
+  int status;
+  int result;
+
+#ifdef DEBUG
+  printf ("original argv0 = %s\n", argv0);
+#endif
+
+  /* Posix requires non-NULL argv[0] */
+  if (argv0 == NULL)
+    {
+      fputs ("A NULL argv[0] was passed through an exec system call.\n",
+             stderr);
+      abort ();
+    }
+
+  program_name = argv0;
+  result = 0;
+  internal_need_vms_symbol = 0;
+
+  /* If the path name starts with a /, then it is an absolute path         */
+  /* that may have been generated by the CRTL instead of the command name  */
+  /* If it is the device name between the slashes, then this was likely    */
+  /* from the run command and needs to be fixed up.                        */
+  /* If the DECC$POSIX_COMPLIANT_PATHNAMES is set to 2, then it is the     */
+  /* DISK$VOLUME that will be present, and it will still need to be fixed. */
+  if (argv0[0] == '/')
+    {
+      char * nextslash;
+      int length;
+      struct item_list_3 itemlist[3];
+      unsigned short dvi_iosb[4];
+      char alldevnam[64];
+      unsigned short alldevnam_len;
+      struct dsc$descriptor_s devname_dsc;
+      char diskvolnam[256];
+      unsigned short diskvolnam_len;
+
+      internal_need_vms_symbol = 1;
+
+       /* Get some information about the disk */
+      /*--------------------------------------*/
+      itemlist[0].len = (sizeof alldevnam) - 1;
+      itemlist[0].code = DVI$_ALLDEVNAM;
+      itemlist[0].bufadr = alldevnam;
+      itemlist[0].retlen = &alldevnam_len;
+      itemlist[1].len = (sizeof diskvolnam) - 1 - 5;
+      itemlist[1].code = DVI$_VOLNAM;
+      itemlist[1].bufadr = &diskvolnam[5];
+      itemlist[1].retlen = &diskvolnam_len;
+      itemlist[2].len = 0;
+      itemlist[2].code = 0;
+
+      /* Add the prefix for the volume name. */
+      /* SYS$GETDVI will append the volume name to this */
+      strcpy (diskvolnam, "DISK$");
+
+      nextslash = strchr (&argv0[1], '/');
+      if (nextslash != NULL)
+        {
+          length = nextslash - argv0 - 1;
+
+          /* Cast needed for HP C compiler diagnostic */
+          devname_dsc.dsc$a_pointer = (char *)&argv0[1];
+          devname_dsc.dsc$w_length = length;
+          devname_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+          devname_dsc.dsc$b_class = DSC$K_CLASS_S;
+
+          status = SYS$GETDVIW (EFN$C_ENF, 0, &devname_dsc, itemlist,
+                                dvi_iosb, NULL, 0, 0);
+          if (!$VMS_STATUS_SUCCESS (status))
+            {
+              /* If the sys$getdviw fails, then this path was passed by */
+              /* An exec() program and not from DCL, so do nothing */
+              /* An example is "/tmp/program" where tmp: does not exist */
+#ifdef DEBUG
+              printf ("sys$getdviw failed with status %d\n", status);
+#endif
+              result = 0;
+             }
+           else if (!$VMS_STATUS_SUCCESS (dvi_iosb[0]))
+             {
+#ifdef DEBUG
+                printf ("sys$getdviw failed with iosb %d\n", dvi_iosb[0]);
+#endif
+                result = 0;
+              }
+            else
+              {
+                char * devnam;
+                int devnam_len;
+                char argv_dev[64];
+
+                /* Null terminate the returned alldevnam */
+                alldevnam[alldevnam_len] = 0;
+                devnam = alldevnam;
+                devnam_len = alldevnam_len;
+
+                /* Need to skip past any leading underscore */
+                if (devnam[0] == '_')
+                  {
+                    devnam++;
+                    devnam_len--;
+                  }
+
+                /* And remove the trailing colon */
+                if (devnam[devnam_len - 1] == ':')
+                  {
+                    devnam_len--;
+                    devnam[devnam_len] = 0;
+                  }
+
+                /* Null terminate the returned volnam */
+                diskvolnam_len += 5;
+                diskvolnam[diskvolnam_len] = 0;
+
+                /* Check first for normal CRTL behavior */
+                if (devnam_len == length)
+                  {
+                    strncpy (vms_new_nam, &argv0[1], length);
+                    vms_new_nam[length] = 0;
+                    result = (strcasecmp (devnam, vms_new_nam) == 0);
+                  }
+
+                /* If we have not got a match, check for POSIX Compliant */
+                /* behavior.  To be more accurate, we could also check */
+                /* to see if that feature is active. */
+                if ((result == 0) && (diskvolnam_len == length))
+                  {
+                    strncpy (vms_new_nam, &argv0[1], length);
+                    vms_new_nam[length] = 0;
+                    result = (strcasecmp (diskvolnam, vms_new_nam) == 0);
+                  }
+              }
+        }
+      }
+    else
+      {
+        /* The path did not start with a slash, so it could be VMS format */
+        /* If it is vms format, it has a volume/device in it as it must   */
+        /* be an absolute path */
+        struct dsc$descriptor_s path_desc;
+        int status;
+        unsigned long field_flags;
+        struct filescan_itmlst_2 item_list[5];
+        char * volume;
+        char * name;
+        int name_len;
+        char * ext;
+
+        path_desc.dsc$a_pointer = (char *)argv0; /* cast ok */
+        path_desc.dsc$w_length = strlen (argv0);
+        path_desc.dsc$b_dtype = DSC$K_DTYPE_T;
+        path_desc.dsc$b_class = DSC$K_CLASS_S;
+
+        /* Don't actually need to initialize anything buf itmcode */
+        /* I just do not like uninitialized input values */
+
+        /* Sanity check, this must be the same length as input */
+        item_list[0].itmcode = FSCN$_FILESPEC;
+        item_list[0].length = 0;
+        item_list[0].component = NULL;
+
+        /* If the device is present, then it if a VMS spec */
+        item_list[1].itmcode = FSCN$_DEVICE;
+        item_list[1].length = 0;
+        item_list[1].component = NULL;
+
+        /* we need the program name and type */
+        item_list[2].itmcode = FSCN$_NAME;
+        item_list[2].length = 0;
+        item_list[2].component = NULL;
+
+        item_list[3].itmcode = FSCN$_TYPE;
+        item_list[3].length = 0;
+        item_list[3].component = NULL;
+
+        /* End the list */
+        item_list[4].itmcode = 0;
+        item_list[4].length = 0;
+        item_list[4].component = NULL;
+
+        status = SYS$FILESCAN ((const struct dsc$descriptor_s *)&path_desc,
+                               item_list, &field_flags, NULL, NULL);
+
+
+        if ($VMS_STATUS_SUCCESS (status) &&
+           (item_list[0].length == path_desc.dsc$w_length) &&
+           (item_list[1].length != 0))
+          {
+
+            char * dollar;
+            int keep_ext;
+            int i;
+
+            /* We need the filescan to be successful, */
+            /* same length as input, and a volume to be present */
+            internal_need_vms_symbol = 1;
+
+            /* We will assume that we only get to this path on a version */
+            /* of VMS that does not support the EFS character set */
+
+            /* There may be a xxx$ prefix on the image name.  Linux */
+            /* programs do not handle that well, so strip the prefix */
+            name = item_list[2].component;
+            name_len = item_list[2].length;
+            dollar = strrchr (name, '$');
+            if (dollar != NULL)
+              {
+                dollar++;
+                name_len = name_len - (dollar - name);
+                name = dollar;
+              }
+
+            strncpy (vms_new_nam, name, name_len);
+            vms_new_nam[name_len] = 0;
+
+            /* Commit to using the new name */
+            program_name = vms_new_nam;
+
+            /* We only keep the extension if it is not ".exe" */
+            keep_ext = 0;
+            ext = item_list[3].component;
+
+            if (item_list[3].length != 1)
+              {
+                keep_ext = 1;
+                if (item_list[3].length == 4)
+                  {
+                    if ((ext[1] == 'e' || ext[1] == 'E') &&
+                        (ext[2] == 'x' || ext[2] == 'X') &&
+                        (ext[3] == 'e' || ext[3] == 'E'))
+                      keep_ext = 0;
+                  }
+              }
+
+            if (keep_ext == 1)
+              strncpy (&vms_new_nam[name_len], ext, item_list[3].length);
+          }
+      }
+
+    if (result)
+      {
+        char * lastslash;
+        char * dollar;
+        char * dotexe;
+        char * lastdot;
+        char * extension;
+
+        /* This means it is probably the name from a DCL command */
+        /* Find the last slash which separates the file from the */
+        /* path. */
+        lastslash = strrchr (argv0, '/');
+
+        if (lastslash != NULL) {
+            int i;
+
+            lastslash++;
+
+            /* There may be a xxx$ prefix on the image name.  Linux */
+            /* programs do not handle that well, so strip the prefix */
+            dollar = strrchr (lastslash, '$');
+
+            if (dollar != NULL) {
+                dollar++;
+                lastslash = dollar;
+            }
+
+            strcpy (vms_new_nam, lastslash);
+
+            /* In UNIX mode + EFS character set, there should not be a */
+            /* version present, as it is not possible when parsing to  */
+            /* tell if it is a version or part of the UNIX filename as */
+            /* UNIX programs use numeric extensions for many reasons.  */
+
+            lastdot = strrchr (vms_new_nam, '.');
+            if (lastdot != NULL) {
+                int i;
+
+                i = 1;
+                while (isdigit (lastdot[i])) {
+                    i++;
+                }
+                if (lastdot[i] == 0) {
+                    *lastdot = 0;
+                }
+            }
+
+            /* Find the .exe on the name (case insenstive) and toss it */
+            dotexe = strrchr (vms_new_nam, '.');
+            if (dotexe != NULL) {
+                if ((dotexe[1] == 'e' || dotexe[1] == 'E') &&
+                    (dotexe[2] == 'x' || dotexe[2] == 'X') &&
+                    (dotexe[3] == 'e' || dotexe[3] == 'E') &&
+                    (dotexe[4] == 0)) {
+
+                    *dotexe = 0;
+                } else {
+                     /* Also need to handle a null extension because of a */
+                     /* CRTL bug. */
+                     if (dotexe[1] == 0) {
+                         *dotexe = 0;
+                    }
+                }
+            }
+
+            /* Commit to new name */
+            program_name = vms_new_nam;
+
+        } else {
+            /* There is no way that the code should ever get here */
+            /* As we already verified that the '/' was present */
+            fprintf (stderr, "Sanity failure somewhere we lost a '/'\n");
+        }
+    }
+}
+
+#ifdef DEBUG
+
+int
+main (int argc, char ** argv, char **env)
+{
+
+  char command[1024];
+
+  set_program_name (argv[0]);
+
+  printf ("modified argv[0] = %s\n", program_name);
+
+  return 0;
+}
+#endif
index 3be3f0c..814b89d 100644 (file)
--- a/vmsdir.h
+++ b/vmsdir.h
@@ -1,5 +1,5 @@
 /* dirent.h for vms
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 6ed136c..e422d48 100644 (file)
@@ -1,5 +1,5 @@
 /* VMS functions
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -118,7 +118,7 @@ closedir (DIR *dir)
       struct FAB *dfab = &dir->fab;
       struct NAM *dnam = (struct NAM *)(dfab->fab$l_nam);
       if (dnam != NULL)
-       free (dnam->nam$l_esa);
+        free (dnam->nam$l_esa);
       free (dnam);
       free (dir);
     }
index 02bdbf5..e504a09 100644 (file)
--- a/vmsify.c
+++ b/vmsify.c
@@ -1,5 +1,5 @@
 /* vmsify.c -- Module for vms <-> unix file name conversion
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index b11bca1..f45c8a8 100644 (file)
--- a/vmsjobs.c
+++ b/vmsjobs.c
@@ -1,7 +1,7 @@
 /* --------------- Moved here from job.c ---------------
    This file must be #included in job.c, as it accesses static functions.
 
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -20,13 +20,69 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <descrip.h>
 #include <clidef.h>
 
+/* TODO - VMS specific header file conditionally included in makeint.h */
+
+#include <stsdef.h>
+#include <ssdef.h>
+void
+decc$exit (int status);
+
+/* Lowest legal non-success VMS exit code is 8 */
+/* GNU make only defines codes 0, 1, 2 */
+/* So assume any exit code > 8 is a VMS exit code */
+
+#ifndef MAX_EXPECTED_EXIT_CODE
+# define MAX_EXPECTED_EXIT_CODE 7
+#endif
+
+
+#if __CRTL_VER >= 70302000 && !defined(__VAX)
+# define MAX_DCL_LINE_LENGTH 4095
+# define MAX_DCL_CMD_LINE_LENGTH 8192
+#else
+# define MAX_DCL_LINE_LENGTH 255
+# define MAX_DCL_CMD_LINE_LENGTH 1024
+#endif
+#define MAX_DCL_TOKEN_LENGTH 255
+#define MAX_DCL_TOKENS 127
+
+enum auto_pipe { nopipe, add_pipe, dcl_pipe };
+
 char *vmsify (char *name, int type);
 
 static int vms_jobsefnmask = 0;
 
+/* returns whether path is assumed to be a unix like shell. */
+int
+_is_unixy_shell (const char *path)
+{
+  return vms_gnv_shell;
+}
+
+#define VMS_GETMSG_MAX 256
+static char vms_strsignal_text[VMS_GETMSG_MAX + 2];
+
+char *
+vms_strsignal (int status)
+{
+  if (status <= MAX_EXPECTED_EXIT_CODE)
+    sprintf (vms_strsignal_text, "lib$spawn returned %x", status);
+  else
+    {
+      int vms_status;
+      unsigned short * msg_len;
+      unsigned char out[4];
+      vms_status = SYS$GETMSG (status, &msg_len,
+                               vms_strsignal_text, 7, *out);
+    }
+
+  return vms_strsignal_text;
+}
+
+
 /* Wait for nchildren children to terminate */
 static void
-vmsWaitForChildren(int *status)
+vmsWaitForChildren (int *status)
 {
   while (1)
     {
@@ -41,72 +97,6 @@ vmsWaitForChildren(int *status)
   return;
 }
 
-/* Set up IO redirection.  */
-
-static char *
-vms_redirect (struct dsc$descriptor_s *desc, char *fname, char *ibuf)
-{
-  char *fptr;
-  char saved;
-
-  ibuf++;
-  while (isspace ((unsigned char)*ibuf))
-    ibuf++;
-  fptr = ibuf;
-  while (*ibuf && !isspace ((unsigned char)*ibuf))
-    ibuf++;
-  saved = *ibuf;
-  *ibuf = 0;
-  if (strcmp (fptr, "/dev/null") != 0)
-    {
-      strcpy (fname, vmsify (fptr, 0));
-      if (strchr (fname, '.') == 0)
-        strcat (fname, ".");
-    }
-  desc->dsc$w_length = strlen (fname);
-  desc->dsc$a_pointer = fname;
-  desc->dsc$b_dtype = DSC$K_DTYPE_T;
-  desc->dsc$b_class = DSC$K_CLASS_S;
-
-  if (*fname == 0)
-    printf (_("Warning: Empty redirection\n"));
-  if (saved=='\0')
-    return ibuf;
-  *ibuf = saved;
-  return --ibuf;
-}
-
-
-/* found apostrophe at (p-1)
-   inc p until after closing apostrophe.
-*/
-
-static char *
-vms_handle_apos (char *p)
-{
-  int alast;
-  alast = 0;
-
-  while (*p != 0)
-    if (*p == '"')
-      if (alast)
-        {
-          alast = 0;
-          p++;
-        }
-      else
-        {
-          p++;
-          if (*p!='"')
-            break;
-          alast = 1;
-        }
-    else
-      p++;
-
-  return p;
-}
-
 static int ctrlYPressed= 0;
 /* This is called at main or AST level. It is at AST level for DONTWAITFORCHILD
    and at main level otherwise. In any case it is called when a child process
@@ -114,15 +104,21 @@ static int ctrlYPressed= 0;
    inner mode level AST.
 */
 static int
-vmsHandleChildTerm(struct child *child)
+vmsHandleChildTerm (struct child *child)
 {
   int exit_code;
   register struct child *lastc, *c;
   int child_failed;
 
-  vms_jobsefnmask &= ~(1 << (child->efn - 32));
+  /* The child efn is 0 when a built-in or null command is executed
+     successfully with out actually creating a child.
+  */
+  if (child->efn > 0)
+  {
+    vms_jobsefnmask &= ~(1 << (child->efn - 32));
 
-  lib$free_ef (&child->efn);
+    lib$free_ef (&child->efn);
+  }
   if (child->comname)
     {
       if (!ISDB (DB_JOBS) && !ctrlYPressed)
@@ -132,82 +128,40 @@ vmsHandleChildTerm(struct child *child)
 
   (void) sigblock (fatal_signal_mask);
 
-  child_failed = !(child->cstatus & 1);
-  if (child_failed)
-    exit_code = child->cstatus;
+  /* First check to see if this is a POSIX exit status and handle */
+  if ((child->cstatus & VMS_POSIX_EXIT_MASK) == VMS_POSIX_EXIT_MASK)
+    {
+      exit_code = (child->cstatus >> 3) & 255;
+      if (exit_code != MAKE_SUCCESS)
+        child_failed = 1;
+    }
+  else
+    {
+      child_failed = !$VMS_STATUS_SUCCESS (child->cstatus);
+      if (child_failed)
+        exit_code = child->cstatus;
+    }
 
   /* Search for a child matching the deceased one.  */
   lastc = 0;
-#if defined(RECURSIVEJOBS) /* I've had problems with recursive stuff and process handling */
+#if defined(RECURSIVEJOBS)
+  /* I've had problems with recursive stuff and process handling */
   for (c = children; c != 0 && c != child; lastc = c, c = c->next)
     ;
 #else
   c = child;
 #endif
 
-  if (child_failed && !c->noerror && !ignore_errors_flag)
-    {
-      /* The commands failed.  Write an error message,
-         delete non-precious targets, and abort.  */
-      child_error (c, c->cstatus, 0, 0, 0);
-      c->file->update_status = us_failed;
-      delete_child_targets (c);
-    }
-  else
+  if ($VMS_STATUS_SUCCESS (child->vms_launch_status))
     {
-      if (child_failed)
-        {
-          /* The commands failed, but we don't care.  */
-          child_error (c, c->cstatus, 0, 0, 1);
-          child_failed = 0;
-        }
-
-#if defined(RECURSIVEJOBS) /* I've had problems with recursive stuff and process handling */
-      /* If there are more commands to run, try to start them.  */
-      start_job (c);
-
-      switch (c->file->command_state)
-        {
-        case cs_running:
-          /* Successfully started.  */
-          break;
-
-        case cs_finished:
-          if (c->file->update_status != us_success)
-            /* We failed to start the commands.  */
-            delete_child_targets (c);
-          break;
-
-        default:
-          OS (error, NILF,
-              _("internal error: '%s' command_state"), c->file->name);
-          abort ();
-          break;
-        }
-#endif /* RECURSIVEJOBS */
+      /* Convert VMS success status to 0 for UNIX code to be happy */
+      child->vms_launch_status = 0;
     }
 
   /* Set the state flag to say the commands have finished.  */
   c->file->command_state = cs_finished;
   notice_finished_file (c->file);
 
-#if defined(RECURSIVEJOBS) /* I've had problems with recursive stuff and process handling */
-  /* Remove the child from the chain and free it.  */
-  if (lastc == 0)
-    children = c->next;
-  else
-    lastc->next = c->next;
-  free_child (c);
-#endif /* RECURSIVEJOBS */
-
-  /* There is now another slot open.  */
-  if (job_slots_used > 0)
-    --job_slots_used;
-
-  /* If the job failed, and the -k flag was not given, die.  */
-  if (child_failed && !keep_going_flag)
-    die (exit_code);
-
   (void) sigsetmask (sigblock (0) & ~(fatal_signal_mask));
 
   return 1;
@@ -216,8 +170,6 @@ vmsHandleChildTerm(struct child *child)
 /* VMS:
    Spawn a process executing the command in ARGV and return its pid. */
 
-#define MAXCMDLEN 200
-
 /* local helpers to make ctrl+c and ctrl+y working, see below */
 #include <iodef.h>
 #include <libclidef.h>
@@ -298,47 +250,584 @@ tryToSetupYAst(void)
     chan = loc_chan;
 }
 
-static int
-nextnl(char *cmd, int l)
+/* Check if a token is too long */
+#define INC_TOKEN_LEN_OR_RETURN(x) {token->length++; \
+  if (token->length >= MAX_DCL_TOKEN_LENGTH) \
+    { token->cmd_errno = ERANGE; return x; }}
+
+#define INC_TOKEN_LEN_OR_BREAK {token->length++; \
+  if (token->length >= MAX_DCL_TOKEN_LENGTH) \
+    { token->cmd_errno = ERANGE; break; }}
+
+#define ADD_TOKEN_LEN_OR_RETURN(add_len, x) {token->length += add_len; \
+  if (token->length >= MAX_DCL_TOKEN_LENGTH) \
+    { token->cmd_errno = ERANGE; return x; }}
+
+/* Check if we are out of space for more tokens */
+#define V_NEXT_TOKEN { if (cmd_tkn_index < MAX_DCL_TOKENS) \
+  cmd_tokens[++cmd_tkn_index] = NULL; \
+  else { token.cmd_errno = E2BIG; break; } \
+  token.length = 0;}
+
+
+#define UPDATE_TOKEN {cmd_tokens[cmd_tkn_index] = strdup(token.text); \
+  V_NEXT_TOKEN;}
+
+#define EOS_ERROR(x) { if (*x == 0) { token->cmd_errno = ERANGE; break; }}
+
+struct token_info
+  {
+    char *text;       /* Parsed text */
+    int length;       /* Length of parsed text */
+    char *src;        /* Pointer to source text */
+    int cmd_errno;    /* Error status of parse */
+    int use_cmd_file; /* Force use of a command file */
+  };
+
+
+/* Extract a Posix single quoted string from input line */
+static char *
+posix_parse_sq (struct token_info *token)
 {
-  int instring;
-  instring = 0;
-  while (cmd[l])
+  /* A Posix quoted string with no expansion unless in a string
+     Unix simulation means no lexical functions present.
+  */
+  char * q;
+  char * p;
+  q = token->text;
+  p = token->src;
+
+  *q++ = '"';
+  p++;
+  INC_TOKEN_LEN_OR_RETURN (p);
+
+  while (*p != '\'' && (token->length < MAX_DCL_TOKEN_LENGTH))
     {
-      if (cmd[l]=='"')
-        instring = !instring;
-      else if (cmd[l]=='\n' && !instring)
-        return ++l;
-      ++l;
+      EOS_ERROR (p);
+      if (*p == '"')
+        {
+          /* Embedded double quotes need to be doubled */
+          *q++ = '"';
+          INC_TOKEN_LEN_OR_BREAK;
+          *q = '"';
+        }
+      else
+        *q = *p;
+
+      q++;
+      p++;
+      INC_TOKEN_LEN_OR_BREAK;
+    }
+  *q++ = '"';
+  p++;
+  INC_TOKEN_LEN_OR_RETURN (p);
+  *q = 0;
+  return p;
+}
+
+/* Extract a Posix double quoted string from input line */
+static char *
+posix_parse_dq (struct token_info *token)
+{
+  /* Unix mode:  Any imbedded \" becomes doubled.
+                 \t is tab, \\, \$ leading character stripped.
+                 $ character replaced with \' unless escaped.
+  */
+  char * q;
+  char * p;
+  q = token->text;
+  p = token->src;
+  *q++ = *p++;
+  INC_TOKEN_LEN_OR_RETURN (p);
+  while (*p != 0)
+    {
+      if (*p == '\\')
+        {
+          switch(p[1])
+            {
+            case 't':     /* Convert tabs */
+              *q = '\t';
+              p++;
+              break;
+            case '\\':     /* Just remove leading backslash */
+            case '$':
+              p++;
+              *q = *p;
+              break;
+            case '"':
+              p++;
+              *q = *p;
+              *q++ = '"';
+              INC_TOKEN_LEN_OR_BREAK;
+            default:      /* Pass through unchanged */
+              *q++ = *p++;
+              INC_TOKEN_LEN_OR_BREAK;
+            }
+          INC_TOKEN_LEN_OR_BREAK;
+        }
+      else if (*p == '$' && isalpha (p[1]))
+        {
+          /* A symbol we should be able to substitute */
+          *q++ = '\'';
+          INC_TOKEN_LEN_OR_BREAK;
+          *q = '\'';
+          INC_TOKEN_LEN_OR_BREAK;
+          token->use_cmd_file = 1;
+        }
+      else
+        {
+          *q = *p;
+          INC_TOKEN_LEN_OR_BREAK;
+          if (*p == '"')
+            {
+              p++;
+              q++;
+              break;
+            }
+        }
+      p++;
+      q++;
+    }
+  *q = 0;
+  return p;
+}
+
+/* Extract a VMS quoted string or substitution string from input line */
+static char *
+vms_parse_quotes (struct token_info *token)
+{
+  /* VMS mode, the \' means that a symbol substitution is starting
+     so while you might think you can just copy until the next
+     \'.  Unfortunately the substitution can be a lexical function
+     which can contain embedded strings and lexical functions.
+     Messy, so both types need to be handled together.
+  */
+  char * q;
+  char * p;
+  q = token->text;
+  p = token->src;
+  int parse_level[MAX_DCL_TOKENS + 1];
+  int nest = 0;
+
+  parse_level[0] = *p;
+  if (parse_level[0] == '\'')
+    token->use_cmd_file = 1;
+
+  *q++ = *p++;
+  INC_TOKEN_LEN_OR_RETURN (p);
+
+
+  /* Copy everything until after the next single quote at nest == 0 */
+  while (token->length < MAX_DCL_TOKEN_LENGTH)
+    {
+      EOS_ERROR (p);
+      *q = *p;
+      INC_TOKEN_LEN_OR_BREAK;
+      if ((*p == parse_level[nest]) && (p[1] != '"'))
+        {
+          if (nest == 0)
+            {
+              *q++ = *p++;
+              break;
+            }
+          nest--;
+        }
+      else
+        {
+          switch(*p)
+            {
+            case '\\':
+              /* Handle continuation on to next line */
+              if (p[1] != '\n')
+                break;
+              p++;
+              p++;
+              *q = *p;
+              break;
+            case '(':
+              /* Parenthesis only in single quote level */
+              if (parse_level[nest] == '\'')
+                {
+                  nest++;
+                  parse_level[nest] == ')';
+                }
+              break;
+            case '"':
+              /* Double quotes only in parenthesis */
+              if (parse_level[nest] == ')')
+                {
+                  nest++;
+                  parse_level[nest] == '"';
+                }
+              break;
+            case '\'':
+              /* Symbol substitution ony in double quotes */
+              if ((p[1] == '\'') && (parse_level[nest] == '"'))
+                {
+                  nest++;
+                  parse_level[nest] == '\'';
+                  *p++ = *q++;
+                  token->use_cmd_file = 1;
+                  INC_TOKEN_LEN_OR_BREAK;
+                  break;
+                }
+              *q = *p;
+            }
+        }
+      p++;
+      q++;
+      /* Pass through doubled double quotes */
+      if ((*p == '"') && (p[1] == '"') && (parse_level[nest] == '"'))
+      {
+        *p++ = *q++;
+        INC_TOKEN_LEN_OR_BREAK;
+        *p++ = *q++;
+        INC_TOKEN_LEN_OR_BREAK;
+      }
+    }
+  *q = 0;
+  return p;
+}
+
+/* Extract a $ string from the input line */
+static char *
+posix_parse_dollar (struct token_info *token)
+{
+  /* $foo becomes 'foo' */
+  char * q;
+  char * p;
+  q = token->text;
+  p = token->src;
+  token->use_cmd_file = 1;
+
+  p++;
+  *q++ = '\'';
+  INC_TOKEN_LEN_OR_RETURN (p);
+
+  while ((isalnum (*p)) || (*p == '_'))
+    {
+      *q++ = *p++;
+      INC_TOKEN_LEN_OR_BREAK;
+    }
+  *q++ = '\'';
+  while (1)
+    {
+      INC_TOKEN_LEN_OR_BREAK;
+      break;
+    }
+  *q = 0;
+  return p;
+}
+
+const char *vms_filechars = "0123456789abcdefghijklmnopqrstuvwxyz" \
+   "ABCDEFGHIJKLMNOPQRSTUVWXYZ[]<>:/_-.$";
+
+/* Simple text copy */
+static char *
+parse_text (struct token_info *token, int assignment_hack)
+{
+  char * q;
+  char * p;
+  int str_len;
+  q = token->text;
+  p = token->src;
+
+  /* If assignment hack, then this text needs to be double quoted. */
+  if (vms_unix_simulation && (assignment_hack == 2))
+    {
+      *q++ = '"';
+      INC_TOKEN_LEN_OR_RETURN (p);
+    }
+
+  *q++ = *p++;
+  INC_TOKEN_LEN_OR_RETURN (p);
+
+  while (*p != 0)
+    {
+      str_len = strspn (p, vms_filechars);
+      if (str_len == 0)
+        {
+          /* Pass through backslash escapes in Unix simulation
+             probably will not work anyway.
+             All any character after a ^ otherwise to support EFS.
+          */
+          if (vms_unix_simulation && (p[0] == '\\') && (p[1] != 0))
+            str_len = 2;
+          else if ((p[0] == '^') && (p[1] != 0))
+            str_len = 2;
+          else if (!vms_unix_simulation && (p[0] == ';'))
+            str_len = 1;
+
+          if (str_len == 0)
+            {
+              /* If assignment hack, then this needs to be double quoted. */
+              if (vms_unix_simulation && (assignment_hack == 2))
+              {
+                *q++ = '"';
+                INC_TOKEN_LEN_OR_RETURN (p);
+              }
+              *q = 0;
+              return p;
+            }
+        }
+      if (str_len > 0)
+        {
+          ADD_TOKEN_LEN_OR_RETURN (str_len, p);
+          strncpy (q, p, str_len);
+          p += str_len;
+          q += str_len;
+          *q = 0;
+        }
+    }
+  /* If assignment hack, then this text needs to be double quoted. */
+  if (vms_unix_simulation && (assignment_hack == 2))
+    {
+      *q++ = '"';
+      INC_TOKEN_LEN_OR_RETURN (p);
+    }
+  return p;
+}
+
+/* single character copy */
+static char *
+parse_char (struct token_info *token, int count)
+{
+  char * q;
+  char * p;
+  q = token->text;
+  p = token->src;
+
+  while (count > 0)
+    {
+      *q++ = *p++;
+      INC_TOKEN_LEN_OR_RETURN (p);
+      count--;
+    }
+  *q = 0;
+  return p;
+}
+
+/* Build a command string from the collected tokens
+   and process built-ins now
+*/
+static struct dsc$descriptor_s *
+build_vms_cmd (char **cmd_tokens,
+               enum auto_pipe use_pipe_cmd,
+               int append_token)
+{
+  struct dsc$descriptor_s *cmd_dsc;
+  int cmd_tkn_index;
+  char * cmd;
+  int cmd_len;
+  int semicolon_seen;
+
+  cmd_tkn_index = 0;
+  cmd_dsc = xmalloc (sizeof (struct dsc$descriptor_s));
+
+  /* Empty command? */
+  if (cmd_tokens[0] == NULL)
+    {
+      cmd_dsc->dsc$a_pointer = NULL;
+      cmd_dsc->dsc$w_length = 0;
+      return cmd_dsc;
+    }
+
+  /* Max DCL command + 1 extra token and trailing space */
+  cmd = xmalloc (MAX_DCL_CMD_LINE_LENGTH + 256);
+
+  cmd[0] = '$';
+  cmd[1] = 0;
+  cmd_len = 1;
+
+  /* Handle real or auto-pipe */
+  if (use_pipe_cmd == add_pipe)
+    {
+      /* We need to auto convert to a pipe command */
+      strcat (cmd, "pipe ");
+      cmd_len += 5;
+    }
+
+  semicolon_seen = 0;
+  while (cmd_tokens[cmd_tkn_index] != NULL)
+    {
+
+      /* Check for buffer overflow */
+      if (cmd_len > MAX_DCL_CMD_LINE_LENGTH)
+        {
+          errno = E2BIG;
+          break;
+        }
+
+      /* Eliminate double ';' */
+      if (semicolon_seen && (cmd_tokens[cmd_tkn_index][0] == ';'))
+        {
+          semicolon_seen = 0;
+          free (cmd_tokens[cmd_tkn_index++]);
+          if (cmd_tokens[cmd_tkn_index] == NULL)
+            break;
+        }
+
+      /* Special handling for CD built-in */
+      if (strncmp (cmd_tokens[cmd_tkn_index], "builtin_cd", 11) == 0)
+        {
+          int result;
+          semicolon_seen = 0;
+          free (cmd_tokens[cmd_tkn_index]);
+          cmd_tkn_index++;
+          if (cmd_tokens[cmd_tkn_index] == NULL)
+            break;
+          DB(DB_JOBS, (_("BUILTIN CD %s\n"), cmd_tokens[cmd_tkn_index]));
+
+          /* TODO: chdir fails with some valid syntaxes */
+          result = chdir (cmd_tokens[cmd_tkn_index]);
+          if (result != 0)
+            {
+              /* TODO: Handle failure better */
+              free (cmd);
+              while (cmd_tokens[cmd_tkn_index] == NULL)
+                free (cmd_tokens[cmd_tkn_index++]);
+              cmd_dsc->dsc$w_length = -1;
+              cmd_dsc->dsc$a_pointer = NULL;
+              return cmd_dsc;
+            }
+        }
+      else if (strncmp (cmd_tokens[cmd_tkn_index], "exit", 5) == 0)
+        {
+          /* Copy the exit command */
+          semicolon_seen = 0;
+          strcpy (&cmd[cmd_len], cmd_tokens[cmd_tkn_index]);
+          cmd_len += strlen (cmd_tokens[cmd_tkn_index]);
+          free (cmd_tokens[cmd_tkn_index++]);
+          if (cmd_len > MAX_DCL_CMD_LINE_LENGTH)
+            {
+              errno = E2BIG;
+              break;
+            }
+
+          /* Optional whitespace */
+          if (isspace (cmd_tokens[cmd_tkn_index][0]))
+            {
+              strcpy (&cmd[cmd_len], cmd_tokens[cmd_tkn_index]);
+              cmd_len += strlen (cmd_tokens[cmd_tkn_index]);
+              free (cmd_tokens[cmd_tkn_index++]);
+              if (cmd_len > MAX_DCL_CMD_LINE_LENGTH)
+              {
+                errno = E2BIG;
+                break;
+              }
+            }
+
+          /* There should be a status, but it is optional */
+          if (cmd_tokens[cmd_tkn_index][0] == ';')
+            continue;
+
+          /* If Unix simulation, add '((' */
+          if (vms_unix_simulation)
+            {
+              strcpy (&cmd[cmd_len], "((");
+              cmd_len += 2;
+              if (cmd_len > MAX_DCL_CMD_LINE_LENGTH)
+                {
+                  errno = E2BIG;
+                  break;
+                }
+            }
+
+          /* Add the parameter */
+          strcpy (&cmd[cmd_len], cmd_tokens[cmd_tkn_index]);
+          cmd_len += strlen (cmd_tokens[cmd_tkn_index]);
+          free (cmd_tokens[cmd_tkn_index++]);
+          if (cmd_len > MAX_DCL_CMD_LINE_LENGTH)
+            {
+              errno = E2BIG;
+              break;
+            }
+
+          /* Add " * 8) .and. %x7f8) .or. %x1035a002" */
+          if (vms_unix_simulation)
+            {
+              const char *end_str = " * 8) .and. %x7f8) .or. %x1035a002";
+              strcpy (&cmd[cmd_len], end_str);
+              cmd_len += strlen (end_str);
+              if (cmd_len > MAX_DCL_CMD_LINE_LENGTH)
+                {
+                  errno = E2BIG;
+                  break;
+                }
+            }
+          continue;
+        }
+
+      /* auto pipe needs spaces before semicolon */
+      if (use_pipe_cmd == add_pipe)
+        if (cmd_tokens[cmd_tkn_index][0] == ';')
+          {
+            cmd[cmd_len++] = ' ';
+            semicolon_seen = 1;
+            if (cmd_len > MAX_DCL_CMD_LINE_LENGTH)
+              {
+                errno = E2BIG;
+                break;
+              }
+          }
+        else
+          {
+            char ch;
+            ch = cmd_tokens[cmd_tkn_index][0];
+            if (!(ch == ' ' || ch == '\t'))
+              semicolon_seen = 0;
+          }
+
+      strcpy (&cmd[cmd_len], cmd_tokens[cmd_tkn_index]);
+      cmd_len += strlen (cmd_tokens[cmd_tkn_index]);
+
+      free (cmd_tokens[cmd_tkn_index++]);
+
+      /* Skip the append tokens if they exist */
+      if (cmd_tkn_index == append_token)
+        {
+          free (cmd_tokens[cmd_tkn_index++]);
+          if (isspace (cmd_tokens[cmd_tkn_index][0]))
+            free (cmd_tokens[cmd_tkn_index++]);
+          free (cmd_tokens[cmd_tkn_index++]);
+        }
     }
-  return l;
+
+  cmd[cmd_len] = 0;
+  cmd_dsc->dsc$w_length = cmd_len;
+  cmd_dsc->dsc$a_pointer = cmd;
+  cmd_dsc->dsc$b_dtype = DSC$K_DTYPE_T;
+  cmd_dsc->dsc$b_class = DSC$K_CLASS_S;
+
+  return cmd_dsc;
 }
+
 int
-child_execute_job (char *argv, struct child *child)
+child_execute_job (struct child *child, char *argv)
 {
   int i;
-  static struct dsc$descriptor_s cmddsc;
-  static struct dsc$descriptor_s pnamedsc;
-  static struct dsc$descriptor_s ifiledsc;
-  static struct dsc$descriptor_s ofiledsc;
-  static struct dsc$descriptor_s efiledsc;
-  int have_redirection = 0;
-  int have_append = 0;
-  int have_newline = 0;
 
+  static struct dsc$descriptor_s *cmd_dsc;
+  static struct dsc$descriptor_s pnamedsc;
   int spflags = CLI$M_NOWAIT;
   int status;
-  char *cmd = alloca (strlen (argv) + 512), *p, *q;
-  char ifile[256], ofile[256], efile[256];
   int comnamelen;
   char procname[100];
-  int in_string;
+
+  char *p;
+  char *cmd_tokens[(MAX_DCL_TOKENS * 2) + 1]; /* whitespace does not count */
+  char token_str[MAX_DCL_TOKEN_LENGTH + 1];
+  struct token_info token;
+  int cmd_tkn_index;
+  int paren_level = 0;
+  enum auto_pipe use_pipe_cmd = nopipe;
+  int append_token = -1;
+  char *append_file = NULL;
+  int unix_echo_cmd = 0;  /* Special handle Unix echo command */
+  int assignment_hack = 0; /* Handle x=y command as piped command */
 
   /* Parse IO redirection.  */
 
-  ifile[0] = 0;
-  ofile[0] = 0;
-  efile[0] = 0;
   child->comname = NULL;
 
   DB (DB_JOBS, ("child_execute_job (%s)\n", argv));
@@ -347,313 +836,422 @@ child_execute_job (char *argv, struct child *child)
     argv++;
 
   if (*argv == 0)
-    return 0;
+    {
+      /* Only a built-in or a null command - Still need to run term AST */
+      child->cstatus = VMS_POSIX_EXIT_MASK;
+      child->vms_launch_status = SS$_NORMAL;
+      /* TODO what is this "magic number" */
+      child->pid = 270163; /* Special built-in */
+      child->efn = 0;
+      vmsHandleChildTerm (child);
+      return 1;
+    }
 
   sprintf (procname, "GMAKE_%05x", getpid () & 0xfffff);
-  pnamedsc.dsc$w_length = strlen(procname);
+  pnamedsc.dsc$w_length = strlen (procname);
   pnamedsc.dsc$a_pointer = procname;
   pnamedsc.dsc$b_dtype = DSC$K_DTYPE_T;
   pnamedsc.dsc$b_class = DSC$K_CLASS_S;
 
-  in_string = 0;
+  /* Old */
   /* Handle comments and redirection.
      For ONESHELL, the redirection must be on the first line. Any other
      redirection token is handled by DCL, that is, the pipe command with
      redirection can be used, but it should not be used on the first line
      for ONESHELL. */
-  for (p = argv, q = cmd; *p; p++, q++)
+
+  /* VMS parser notes:
+     1. A token is any of DCL verbs, qualifiers, parameters, or punctuation.
+     2. Only MAX_DCL_TOKENS per line in both one line or command file mode.
+     3. Each token limited to MAC_DCL_TOKEN_LENGTH
+     4. If the line to DCL is greater than MAX_DCL_LINE_LENGTH then a
+        command file must be used.
+     5. Currently a command file must be used symbol substitution is to
+        be performed.
+     6. Currently limiting command files to 2 * MAX_DCL_TOKENS.
+
+     Build both a command file token list and command line token list
+     until it is determined that the command line limits are exceeded.
+  */
+
+  cmd_tkn_index = 0;
+  cmd_tokens[cmd_tkn_index] = NULL;
+  p = argv;
+
+  token.text = token_str;
+  token.length = 0;
+  token.cmd_errno = 0;
+  token.use_cmd_file = 0;
+
+  while (*p != 0)
     {
-      if (*p == '"')
-        in_string = !in_string;
-      if (in_string)
-        {
-          *q = *p;
-          continue;
-        }
+      /* We can not build this command so give up */
+      if (token.cmd_errno != 0)
+        break;
+
+      token.src = p;
+
       switch (*p)
         {
-        case '#':
-          *p-- = 0;
-          *q-- = 0;
+        case '\'':
+          if (vms_unix_simulation || unix_echo_cmd)
+            {
+              p = posix_parse_sq (&token);
+              UPDATE_TOKEN;
+              break;
+            }
+
+          /* VMS mode, the \' means that a symbol substitution is starting
+             so while you might think you can just copy until the next
+             \'.  Unfortunately the substitution can be a lexical function
+             which can contain embedded strings and lexical functions.
+             Messy.
+          */
+          p = vms_parse_quotes (&token);
+          UPDATE_TOKEN;
+          break;
+        case '"':
+          if (vms_unix_simulation)
+            {
+              p = posix_parse_dq (&token);
+              UPDATE_TOKEN;
+              break;
+            }
+
+          /* VMS quoted string, can contain lexical functions with
+             quoted strings and nested lexical functions.
+          */
+          p = vms_parse_quotes (&token);
+          UPDATE_TOKEN;
+          break;
+
+        case '$':
+          if (vms_unix_simulation)
+            {
+              p = posix_parse_dollar (&token);
+              UPDATE_TOKEN;
+              break;
+            }
+
+          /* Otherwise nothing special */
+          p = parse_text (&token, 0);
+          UPDATE_TOKEN;
           break;
         case '\\':
-          p++;
-          if (*p == '\n')
+          if (p[1] == '\n')
+            {
+              /* Line continuation, remove it */
+              p += 2;
+              break;
+            }
+
+          /* Ordinary character otherwise */
+          if (assignment_hack != 0)
+            assignment_hack++;
+          if (assignment_hack > 2)
+            {
+              assignment_hack = 0;          /* Reset */
+              if (use_pipe_cmd == nopipe)   /* force pipe use */
+                use_pipe_cmd = add_pipe;
+              token_str[0] = ';';              /* add ; token */
+              token_str[1] = 0;
+              UPDATE_TOKEN;
+            }
+          p = parse_text (&token, assignment_hack);
+          UPDATE_TOKEN;
+          break;
+        case '!':
+        case '#':
+          /* Unix '#' is VMS '!' which comments out the rest of the line.
+             Historically the rest of the line has been skipped.
+             Not quite the right thing to do, as the f$verify lexical
+             function works in comments.  But this helps keep the line
+             lengths short.
+          */
+          unix_echo_cmd = 0;
+          while (*p != '\n' && *p != 0)
             p++;
-          if (isspace ((unsigned char)*p))
+          break;
+        case '(':
+          /* Subshell, equation, or lexical function argument start */
+          p = parse_char (&token, 1);
+          UPDATE_TOKEN;
+          paren_level++;
+          break;
+        case ')':
+          /* Close out a paren level */
+          p = parse_char (&token, 1);
+          UPDATE_TOKEN;
+          paren_level--;
+          /* TODO: Should we diagnose if paren_level goes negative? */
+          break;
+        case '&':
+          if (isalpha (p[1]) && !vms_unix_simulation)
             {
-              do { p++; } while (isspace ((unsigned char)*p));
-              p--;
+              /* VMS symbol substitution */
+              p = parse_text (&token, 0);
+              token.use_cmd_file = 1;
+              UPDATE_TOKEN;
+              break;
             }
-          *q = *p;
+          if (use_pipe_cmd == nopipe)
+            use_pipe_cmd = add_pipe;
+          if (p[1] != '&')
+            p = parse_char (&token, 1);
+          else
+            p = parse_char (&token, 2);
+          UPDATE_TOKEN;
+          break;
+        case '|':
+          if (use_pipe_cmd == nopipe)
+            use_pipe_cmd = add_pipe;
+          if (p[1] != '|')
+            p = parse_char (&token, 1);
+          else
+            p = parse_char (&token, 2);
+          UPDATE_TOKEN;
           break;
+        case ';':
+          /* Separator - convert to a pipe command. */
+          unix_echo_cmd = 0;
         case '<':
-          if (have_newline==0)
+          if (use_pipe_cmd == nopipe)
+            use_pipe_cmd = add_pipe;
+          p = parse_char (&token, 1);
+          UPDATE_TOKEN;
+          break;
+        case '>':
+          if (use_pipe_cmd == nopipe)
+            use_pipe_cmd = add_pipe;
+          if (p[1] == '>')
             {
-              p = vms_redirect (&ifiledsc, ifile, p);
-              *q = ' ';
-              have_redirection = 1;
+              /* Parsing would have been simple until support for the >>
+                 append redirect was added.
+                 Implementation needs:
+                 * if not exist output file create empty
+                 * open/append gnv$make_temp??? output_file
+                 * define/user sys$output gnv$make_temp???
+                 ** And all this done before the command previously tokenized.
+                 * command previously tokenized
+                 * close gnv$make_temp???
+              */
+              p = parse_char (&token, 2);
+              append_token = cmd_tkn_index;
+              token.use_cmd_file = 1;
             }
           else
-            *q = *p;
+            p = parse_char (&token, 1);
+          UPDATE_TOKEN;
           break;
-        case '>':
-          if (have_newline==0)
+        case '/':
+          /* Unix path or VMS option start, read until non-path symbol */
+          if (assignment_hack != 0)
+            assignment_hack++;
+          if (assignment_hack > 2)
             {
-              have_redirection = 1;
-              if (*(p-1) == '2')
-                {
-                  q--;
-                  if (strncmp (p, ">&1", 3) == 0)
-                    {
-                      p += 2;
-                      strcpy (efile, "sys$output");
-                      efiledsc.dsc$w_length = strlen(efile);
-                      efiledsc.dsc$a_pointer = efile;
-                      efiledsc.dsc$b_dtype = DSC$K_DTYPE_T;
-                      efiledsc.dsc$b_class = DSC$K_CLASS_S;
-                    }
-                  else
-                    p = vms_redirect (&efiledsc, efile, p);
-                }
-              else
+              assignment_hack = 0;          /* Reset */
+              if (use_pipe_cmd == nopipe)   /* force pipe use */
+                use_pipe_cmd = add_pipe;
+              token_str[0] = ';';              /* add ; token */
+              token_str[1] = 0;
+              UPDATE_TOKEN;
+            }
+          p = parse_text (&token, assignment_hack);
+          UPDATE_TOKEN;
+          break;
+        case ':':
+          if ((p[1] == 0) || isspace (p[1]))
+            {
+              /* Unix Null command - treat as comment until next command */
+              unix_echo_cmd = 0;
+              p++;
+              while (*p != 0)
                 {
-                  if (*(p+1) == '>')
+                  if (*p == ';')
                     {
-                      have_append = 1;
-                      p += 1;
+                      /* Remove Null command from pipeline */
+                      p++;
+                      break;
                     }
-                  p = vms_redirect (&ofiledsc, ofile, p);
+                  p++;
                 }
-              *q = ' ';
+              break;
             }
+
+          /* String assignment */
+          /* := :== or : */
+          if (p[1] != '=')
+            p = parse_char (&token, 1);
+          else if (p[2] != '=')
+            p = parse_char (&token, 2);
           else
-            *q = *p;
+            p = parse_char (&token, 3);
+          UPDATE_TOKEN;
           break;
-        case '\n':
-          have_newline++;
-        default:
-          *q = *p;
+        case '=':
+          /* = or == */
+          /* If this is not an echo statement, this could be a shell
+             assignment.  VMS requires the target to be quoted if it
+             is not a macro substitution */
+          if (!unix_echo_cmd && vms_unix_simulation && (assignment_hack == 0))
+            assignment_hack = 1;
+          if (p[1] != '=')
+            p = parse_char (&token, 1);
+          else
+            p = parse_char (&token, 2);
+          UPDATE_TOKEN;
           break;
-        }
-    }
-  *q = *p;
-  while (isspace ((unsigned char)*--q))
-    *q = '\0';
-
-
-#define VMS_EMPTY_ECHO "write sys$output \"\""
-  if (have_newline == 0)
-    {
-      /* multiple shells */
-      if (strncmp(cmd, "builtin_", 8) == 0)
-        {
-          child->pid = 270163;
-          child->efn = 0;
-          child->cstatus = 1;
-
-          DB(DB_JOBS, (_("BUILTIN [%s][%s]\n"), cmd, cmd + 8));
+        case '+':
+        case '-':
+        case '*':
+          p = parse_char (&token, 1);
+          UPDATE_TOKEN;
+          break;
+        case '.':
+          /* .xxx. operation, VMS does not require the trailing . */
+          p = parse_text (&token, 0);
+          UPDATE_TOKEN;
+          break;
+        default:
+          /* Skip repetitive whitespace */
+          if (isspace (*p))
+            {
+              p = parse_char (&token, 1);
 
-          p = cmd + 8;
+              /* Force to a space or a tab */
+              if ((token_str[0] != ' ') ||
+                  (token_str[0] != '\t'))
+                token_str[0] = ' ';
+              UPDATE_TOKEN;
 
-          if ((*(p) == 'c') && (*(p + 1) == 'd')
-              && ((*(p + 2) == ' ') || (*(p + 2) == '\t')))
-            {
-              p += 3;
-              while ((*p == ' ') || (*p == '\t'))
+              while (isspace (*p))
                 p++;
-              DB(DB_JOBS, (_("BUILTIN CD %s\n"), p));
-              if (chdir(p))
-                return 0;
-              else
-                return 1;
-            }
-          else if ((*(p) == 'e')
-              && (*(p+1) == 'c')
-              && (*(p+2) == 'h')
-              && (*(p+3) == 'o')
-              && ((*(p+4) == ' ') || (*(p+4) == '\t') || (*(p+4) == '\0')))
-            {
-              /* This is not a real builtin, it is a built in pre-processing
-                 for the VMS/DCL echo (write sys$output) to ensure the to be echoed
-                 string is correctly quoted (with the DCL quote character '"'). */
-              char *vms_echo;
-              p += 4;
-              if (*p == '\0')
-                cmd = VMS_EMPTY_ECHO;
-              else
-                {
-                  p++;
-                  while ((*p == ' ') || (*p == '\t'))
-                    p++;
-                  if (*p == '\0')
-                    cmd = VMS_EMPTY_ECHO;
-                  else
-                    {
-                      vms_echo = alloca(strlen(p) + sizeof VMS_EMPTY_ECHO);
-                      strcpy(vms_echo, VMS_EMPTY_ECHO);
-                      vms_echo[sizeof VMS_EMPTY_ECHO - 2] = '\0';
-                      strcat(vms_echo, p);
-                      strcat(vms_echo, "\"");
-                      cmd = vms_echo;
-                    }
-                }
-              DB (DB_JOBS, (_("BUILTIN ECHO %s->%s\n"), p, cmd));
+              if (assignment_hack != 0)
+                assignment_hack++;
+              break;
             }
-          else
+
+          if (assignment_hack != 0)
+            assignment_hack++;
+          if (assignment_hack > 2)
             {
-              printf(_("Unknown builtin command '%s'\n"), cmd);
-              fflush(stdout);
-              return 0;
+              assignment_hack = 0;          /* Reset */
+              if (use_pipe_cmd == nopipe)   /* force pipe use */
+                use_pipe_cmd = add_pipe;
+              token_str[0] = ';';              /* add ; token */
+              token_str[1] = 0;
+              UPDATE_TOKEN;
             }
-        }
-      /* expand ':' aka 'do nothing' builtin for bash and friends */
-      else if (cmd[0]==':' && cmd[1]=='\0')
-        {
-          cmd = "continue";
+          p = parse_text (&token, assignment_hack);
+          if (strncasecmp (token.text, "echo", 4) == 0)
+            unix_echo_cmd = 1;
+          else if (strncasecmp (token.text, "pipe", 4) == 0)
+            use_pipe_cmd = dcl_pipe;
+          UPDATE_TOKEN;
+          break;
         }
     }
-  else
+
+  /* End up here with a list of tokens to build a command line.
+     Deal with errors detected during parsing.
+   */
+  if (token.cmd_errno != 0)
     {
-      /* todo: expand ':' aka 'do nothing' builtin for bash and friends */
-      /* For 'one shell' expand all the
-           builtin_echo
-         to
-           write sys$output ""
-         where one is  ......7 bytes longer.
-         At the same time ensure that the echo string is properly terminated.
-         For that, allocate a command buffer big enough for all possible expansions
-         (have_newline is the count), then expand, copy and terminate. */
-      char *tmp_cmd;
-      int nloff = 0;
-      int vlen = 0;
-      int clen = 0;
-      int inecho;
-
-      tmp_cmd = alloca(strlen(cmd) + (have_newline + 1) * 7 + 1);
-      tmp_cmd[0] = '\0';
-      inecho = 0;
-      while (cmd[nloff])
+      while (cmd_tokens[cmd_tkn_index] == NULL)
+        free (cmd_tokens[cmd_tkn_index++]);
+      child->cstatus = VMS_POSIX_EXIT_MASK | (MAKE_TROUBLE << 3);
+      child->vms_launch_status = SS$_ABORT;
+      /* TODO what is this "magic number" */
+      child->pid = 270163; /* Special built-in */
+      child->efn = 0;
+      errno = token.cmd_errno;
+      return 0;
+    }
+
+  /* Save any redirection to append file */
+  if (append_token != -1)
+    {
+      int file_token;
+      char * lastdot;
+      char * lastdir;
+      char * raw_append_file;
+      file_token = append_token;
+      file_token++;
+      if (isspace (cmd_tokens[file_token][0]))
+        file_token++;
+      raw_append_file = vmsify (cmd_tokens[file_token], 0);
+      /* VMS DCL needs a trailing dot if null file extension */
+      lastdot = strrchr(raw_append_file, '.');
+      lastdir = strrchr(raw_append_file, ']');
+      if (lastdir == NULL)
+        lastdir = strrchr(raw_append_file, '>');
+      if (lastdir == NULL)
+        lastdir = strrchr(raw_append_file, ':');
+      if ((lastdot == NULL) || (lastdot > lastdir))
         {
-          if (inecho)
-            {
-              if (clen < nloff - 1)
-                {
-                  memcpy(&tmp_cmd[vlen], &cmd[clen], nloff - clen - 1);
-                  vlen += nloff - clen - 1;
-                  clen = nloff;
-                }
-              inecho = 0;
-              tmp_cmd[vlen] = '"';
-              vlen++;
-              tmp_cmd[vlen] = '\n';
-              vlen++;
-            }
-          if (strncmp(&cmd[nloff], "builtin_", 8) == 0)
-            {
-              /* ??? */
-              child->pid = 270163;
-              child->efn = 0;
-              child->cstatus = 1;
-
-              DB (DB_JOBS, (_("BUILTIN [%s][%s]\n"), &cmd[nloff], &cmd[nloff+8]));
-              p = &cmd[nloff + 8];
-              if ((*(p) ==        'e')
-                  && (*(p + 1) == 'c')
-                  && (*(p + 2) == 'h')
-                  && (*(p + 3) == 'o')
-                  && ((*(p + 4) == ' ') || (*(p + 4) == '\t') || (*(p + 4) == '\0')))
-                {
-                  if (clen < nloff - 1)
-                    {
-                      memcpy(&tmp_cmd[vlen], &cmd[clen], nloff - clen - 1);
-                      vlen += nloff - clen - 1;
-                      clen = nloff;
-                      if (inecho)
-                        {
-                          inecho = 0;
-                          tmp_cmd[vlen] = '"';
-                          vlen++;
-                        }
-                      tmp_cmd[vlen] = '\n';
-                      vlen++;
-                    }
-                  inecho = 1;
-                  p += 4;
-                  while ((*p == ' ') || (*p == '\t'))
-                    p++;
-                  clen = p - cmd;
-                  memcpy(&tmp_cmd[vlen], VMS_EMPTY_ECHO,
-                      sizeof VMS_EMPTY_ECHO - 2);
-                  vlen += sizeof VMS_EMPTY_ECHO - 2;
-                }
-              else
-                {
-                  printf (_("Builtin command is unknown or unsupported in .ONESHELL: '%s'\n"), &cmd[nloff]);
-                  fflush(stdout);
-                  return 0;
-                }
-            }
-          nloff = nextnl(cmd, nloff + 1);
+          append_file = xmalloc (strlen (raw_append_file) + 1);
+          strcpy (append_file, raw_append_file);
+          strcat (append_file, ".");
         }
-      if (clen < nloff)
+      else
+        append_file = strdup(raw_append_file);
+    }
+
+  cmd_dsc = build_vms_cmd (cmd_tokens, use_pipe_cmd, append_token);
+  if (cmd_dsc->dsc$a_pointer == NULL)
+    {
+      if (cmd_dsc->dsc$w_length < 0)
         {
-          memcpy(&tmp_cmd[vlen], &cmd[clen], nloff - clen);
-          vlen += nloff - clen;
-          clen = nloff;
-          if (inecho)
-            {
-              inecho = 0;
-              tmp_cmd[vlen] = '"';
-              vlen++;
-            }
+          free (cmd_dsc);
+          child->cstatus = VMS_POSIX_EXIT_MASK | (MAKE_TROUBLE << 3);
+          child->vms_launch_status = SS$_ABORT;
+          /* TODO what is this "magic number" */
+          child->pid = 270163; /* Special built-in */
+          child->efn = 0;
+          return 0;
         }
 
-      tmp_cmd[vlen] = '\0';
-
-      cmd = tmp_cmd;
+      /* Only a built-in or a null command - Still need to run term AST */
+      free (cmd_dsc);
+      child->cstatus = VMS_POSIX_EXIT_MASK;
+      child->vms_launch_status = SS$_NORMAL;
+      /* TODO what is this "magic number" */
+      child->pid = 270163; /* Special built-in */
+      child->efn = 0;
+      vmsHandleChildTerm (child);
+      return 1;
     }
 
-#ifdef USE_DCL_COM_FILE
-  /* Enforce the creation of a command file.
-     Then all the make environment variables are written as DCL symbol
-     assignments into the command file as well, so that they are visible
-     in the sub-process but do not affect the current process.
+  if (cmd_dsc->dsc$w_length > MAX_DCL_LINE_LENGTH)
+    token.use_cmd_file = 1;
+
+  DB(DB_JOBS, (_("DCL: %s\n"), cmd_dsc->dsc$a_pointer));
+
+  /* Enforce the creation of a command file if "vms_always_use_cmd_file" is
+     non-zero.
      Further, this way DCL reads the input stream and therefore does
      'forced' symbol substitution, which it doesn't do for one-liners when
-     they are 'lib$spawn'ed. */
-#else
-  /* Create a *.com file if either the command is too long for
-     lib$spawn, or the command contains a newline, or if redirection
-     is desired. Forcing commands with newlines into DCLs allows to
-     store search lists on user mode logicals.  */
-  if (strlen (cmd) > MAXCMDLEN
-      || (have_redirection != 0)
-      || (have_newline != 0))
-#endif
+     they are 'lib$spawn'ed.
+
+     Otherwise the behavior is:
+
+     Create a *.com file if either the command is too long for
+     lib$spawn, or if a redirect appending to a file is desired, or
+     symbol substitition.
+  */
+
+  if (vms_always_use_cmd_file || token.use_cmd_file)
     {
       FILE *outfile;
-      char c;
-      char *sep;
-      int alevel = 0;   /* apostrophe level */
-      int tmpstrlen;
-      char *tmpstr;
-      if (strlen (cmd) == 0)
-        {
-          printf (_("Error, empty command\n"));
-          fflush (stdout);
-          return 0;
-        }
+      int cmd_len;
 
-      outfile = output_tmpfile (&child->comname, "sys$scratch:CMDXXXXXX.COM");
+      outfile = output_tmpfile (&child->comname,
+                                "sys$scratch:gnv$make_cmdXXXXXX.com");
       /*                                          012345678901234567890 */
-#define TMP_OFFSET 12
-#define TMP_LEN 9
       if (outfile == 0)
         pfatal_with_name (_("fopen (temporary file)"));
       comnamelen = strlen (child->comname);
-      tmpstr = &child->comname[TMP_OFFSET];
-      tmpstrlen = TMP_LEN;
+
       /* The whole DCL "script" is executed as one action, and it behaves as
          any DCL "script", that is errors stop it but warnings do not. Usually
          the command on the last line, defines the exit code.  However, with
@@ -667,158 +1265,72 @@ child_execute_job (char *argv, struct child *child)
          verify". However, the prolog and epilog commands are not shown. Also,
          if output redirection is used, the verification output is redirected
          into that file as well. */
-      fprintf (outfile, "$ %.*s_1 = \"''f$verify(0)'\"\n", tmpstrlen, tmpstr);
-      if (ifile[0])
-        {
-          fprintf (outfile, "$ assign/user %s sys$input\n", ifile);
-          DB (DB_JOBS, (_("Redirected input from %s\n"), ifile));
-          ifiledsc.dsc$w_length = 0;
-        }
+      fprintf (outfile, "$ gnv$$make_verify = \"''f$verify(0)'\"\n");
+      fprintf (outfile, "$ gnv$$make_pid = f$getjpi(\"\",\"pid\")\n");
+      fprintf (outfile, "$ on error then $ goto gnv$$make_error\n");
 
-      if (efile[0])
+      /* Handle append redirection */
+      if (append_file != NULL)
         {
-          fprintf (outfile, "$ define sys$error %s\n", efile);
-          DB (DB_JOBS, (_("Redirected error to %s\n"), efile));
-          efiledsc.dsc$w_length = 0;
+          /* If file does not exist, create it */
+          fprintf (outfile,
+                   "$ gnv$$make_al = \"gnv$$make_append''gnv$$make_pid'\"\n");
+          fprintf (outfile,
+                   "$ if f$search(\"%s\") .eqs. \"\" then create %s\n",
+                   append_file, append_file);
+
+          fprintf (outfile,
+                   "$ open/append 'gnv$$make_al' %s\n", append_file);
+
+          /* define sys$output to that file */
+          fprintf (outfile,
+                   "$ define/user sys$output 'gnv$$make_al'\n");
+          DB (DB_JOBS, (_("Append output to %s\n"), append_file));
+          free(append_file);
         }
 
-      if (ofile[0])
-        if (have_append)
-          {
-            fprintf (outfile, "$ define sys$output %.*s\n", comnamelen-3, child->comname);
-            fprintf (outfile, "$ on error then $ goto %.*s\n", tmpstrlen, tmpstr);
-            DB (DB_JOBS, (_("Append output to %s\n"), ofile));
-            ofiledsc.dsc$w_length = 0;
-          }
-        else
-          {
-            fprintf (outfile, "$ define sys$output %s\n", ofile);
-            DB (DB_JOBS, (_("Redirected output to %s\n"), ofile));
-            ofiledsc.dsc$w_length = 0;
-          }
-#ifdef USE_DCL_COM_FILE
-      /* Export the child environment into DCL symbols */
-      if (child->environment != 0)
-        {
-          char **ep = child->environment;
-          char *valstr;
-          while (*ep != 0)
-            {
-              valstr = strchr(*ep, '=');
-              if (valstr == NULL)
-                continue;
-              fprintf(outfile, "$ %.*s=\"%s\"\n", valstr - *ep, *ep,
-                  valstr + 1);
-              ep++;
-            }
-        }
-#endif
-      fprintf (outfile, "$ %.*s_ = f$verify(%.*s_1)\n", tmpstrlen, tmpstr, tmpstrlen, tmpstr);
-
-      /* TODO: give 78 a name! Whether 78 is a good number is another question.
-         Trim, split and write the command lines.
-         Splitting of a command is done after 78 output characters at an
-         appropriate place (after strings, after comma or space and
-         before slash): appending a hyphen indicates that the DCL command
-         is being continued.
-         Trimming is to skip any whitespace around - including - a
-         leading $ from the command to ensure writing exactly one "$ "
-         at the beginning of the line of the output file. Trimming is
-         done when a new command is seen, indicated by a '\n' (outside
-         of a string).
-         The buffer so far is written and reset, when a new command is
-         seen, when a split was done and at the end of the command.
+      fprintf (outfile, "$ gnv$$make_verify = f$verify(gnv$$make_verify)\n");
+
+      /* TODO:
          Only for ONESHELL there will be several commands separated by
-         '\n'. But there can always be multiple continuation lines. */
-      p = sep = q = cmd;
-      for (c = '\n'; c; c = *q++)
-        {
-          switch (c)
-          {
-          case '\n':
-            if (q > p)
-              {
-                fwrite(p, 1, q - p, outfile);
-                p = q;
-              }
-            fputc('$', outfile);
-            fputc(' ', outfile);
-            while (isspace((unsigned char) *p))
-              p++;
-            if (*p == '$')
-              p++;
-            while (isspace((unsigned char) *p))
-              p++;
-            q = sep = p;
-            break;
-          case '"':
-            q = vms_handle_apos(q);
-            sep = q;
-            break;
-          case ',':
-          case ' ':
-            sep = q;
-            break;
-          case '/':
-          case '\0':
-            sep = q - 1;
-            break;
-          default:
-            break;
-          }
-          if (sep - p > 78)
-            {
-              /* Enough stuff for a line. */
-              fwrite(p, 1, sep - p, outfile);
-              p = sep;
-              if (*sep)
-                {
-                  /* The command continues.  */
-                  fputc('-', outfile);
-                }
-              fputc('\n', outfile);
-            }
-        }
+         '\n'. But there can always be multiple continuation lines.
+      */
 
-      if (*p)
-        {
-          fwrite(p, 1, --q - p, outfile);
-          fputc('\n', outfile);
-        }
+      fprintf (outfile, "%s\n", cmd_dsc->dsc$a_pointer);
+      fprintf (outfile, "$ gnv$$make_status_2 = $status\n");
+      fprintf (outfile, "$ goto gnv$$make_exit\n");
 
-      if (have_append)
+      /* Exit and clean up */
+      fprintf (outfile, "$ gnv$$make_error: ! 'f$verify(0)\n");
+      fprintf (outfile, "$ gnv$$make_status_2 = $status\n");
+
+      if (append_token != -1)
         {
-          fprintf (outfile, "$ %.*s: ! 'f$verify(0)\n", tmpstrlen, tmpstr);
-          fprintf (outfile, "$ %.*s_2 = $status\n", tmpstrlen, tmpstr);
-          fprintf (outfile, "$ on error then $ exit\n");
           fprintf (outfile, "$ deassign sys$output\n");
-          if (efile[0])
-            fprintf (outfile, "$ deassign sys$error\n");
-          fprintf (outfile, "$ append:=append\n");
-          fprintf (outfile, "$ delete:=delete\n");
-          fprintf (outfile, "$ append/new %.*s %s\n", comnamelen-3, child->comname, ofile);
-          fprintf (outfile, "$ delete %.*s;*\n", comnamelen-3, child->comname);
-          fprintf (outfile, "$ exit '%.*s_2 + (0*f$verify(%.*s_1))\n", tmpstrlen, tmpstr, tmpstrlen, tmpstr);
-          DB (DB_JOBS, (_("Append %.*s and cleanup\n"), comnamelen-3, child->comname));
+          fprintf (outfile, "$ close 'gnv$$make_al'\n");
+
+          DB (DB_JOBS,
+              (_("Append %.*s and cleanup\n"), comnamelen-3, child->comname));
         }
+      fprintf (outfile, "$ gnv$$make_exit: ! 'f$verify(0)\n");
+      fprintf (outfile,
+             "$ exit 'gnv$$make_status_2' + (0*f$verify(gnv$$make_verify))\n");
 
       fclose (outfile);
 
-      sprintf (cmd, "$ @%s", child->comname);
+      free (cmd_dsc->dsc$a_pointer);
+      cmd_dsc->dsc$a_pointer = xmalloc (256 + 4);
+      sprintf (cmd_dsc->dsc$a_pointer, "$ @%s", child->comname);
+      cmd_dsc->dsc$w_length = strlen (cmd_dsc->dsc$a_pointer);
 
-      DB (DB_JOBS, (_("Executing %s instead\n"), cmd));
+      DB (DB_JOBS, (_("Executing %s instead\n"), child->comname));
     }
 
-  cmddsc.dsc$w_length = strlen(cmd);
-  cmddsc.dsc$a_pointer = cmd;
-  cmddsc.dsc$b_dtype = DSC$K_DTYPE_T;
-  cmddsc.dsc$b_class = DSC$K_CLASS_S;
-
   child->efn = 0;
   while (child->efn < 32 || child->efn > 63)
     {
-      status = lib$get_ef ((unsigned long *)&child->efn);
-      if (!(status & 1))
+      status = LIB$GET_EF ((unsigned long *)&child->efn);
+      if (!$VMS_STATUS_SUCCESS (status))
         {
           if (child->comname)
             {
@@ -830,10 +1342,21 @@ child_execute_job (char *argv, struct child *child)
         }
     }
 
-  sys$clref (child->efn);
+  SYS$CLREF (child->efn);
 
   vms_jobsefnmask |= (1 << (child->efn - 32));
 
+  /* Export the child environment into DCL symbols */
+  if (child->environment != 0)
+    {
+      char **ep = child->environment;
+      while (*ep != 0)
+        {
+          vms_putenv_symbol (*ep);
+          *ep++;
+        }
+    }
+
   /*
     LIB$SPAWN  [command-string]
     [,input-file]
@@ -886,37 +1409,43 @@ child_execute_job (char *argv, struct child *child)
 
   if (!setupYAstTried)
     tryToSetupYAst();
-  status = lib$spawn (&cmddsc,                                  /* cmd-string */
-                      (ifiledsc.dsc$w_length == 0)?0:&ifiledsc, /* input-file */
-                      (ofiledsc.dsc$w_length == 0)?0:&ofiledsc, /* output-file */
-                      &spflags,                                 /* flags */
-                      &pnamedsc,                                /* proc name */
-                      &child->pid, &child->cstatus, &child->efn,
-                      0, 0,
-                      0, 0, 0);
-  if (status & 1)
+  child->vms_launch_status = lib$spawn (cmd_dsc,               /* cmd-string */
+                     NULL, /* input-file */
+                     NULL, /* output-file */
+                     &spflags,                                 /* flags */
+                     &pnamedsc,                                /* proc name */
+                     &child->pid, &child->cstatus, &child->efn,
+                     0, 0,
+                     0, 0, 0);
+
+  status = child->vms_launch_status;
+  if ($VMS_STATUS_SUCCESS (status))
     {
-      status= sys$waitfr (child->efn);
-      vmsHandleChildTerm(child);
+      status = sys$waitfr (child->efn);
+      vmsHandleChildTerm (child);
     }
 #else
-  status = lib$spawn (&cmddsc,
-                      (ifiledsc.dsc$w_length == 0)?0:&ifiledsc,
-                      (ofiledsc.dsc$w_length == 0)?0:&ofiledsc,
+  child->vms_launch_status = lib$spawn (cmd_dsc,
+                      NULL,
+                      NULL,
                       &spflags,
                       &pnamedsc,
                       &child->pid, &child->cstatus, &child->efn,
                       vmsHandleChildTerm, child,
                       0, 0, 0);
+   status = child->vms_launch_status;
 #endif
 
-  if (!(status & 1))
+  /* Free the pointer if not a command file */
+  if (!vms_always_use_cmd_file && !token.use_cmd_file)
+    free (cmd_dsc->dsc$a_pointer);
+  free (cmd_dsc);
+
+  if (!$VMS_STATUS_SUCCESS (status))
     {
-      printf (_("Error spawning, %d\n") ,status);
-      fflush (stdout);
       switch (status)
         {
-        case 0x1c:
+        case SS$_EXQUOTA:
           errno = EPROCLIM;
           break;
         default:
@@ -924,5 +1453,16 @@ child_execute_job (char *argv, struct child *child)
         }
     }
 
+  /* Restore the VMS symbols that were changed */
+  if (child->environment != 0)
+    {
+      char **ep = child->environment;
+      while (*ep != 0)
+        {
+          vms_restore_symbol (*ep);
+          *ep++;
+        }
+    }
+
   return (status & 1);
 }
diff --git a/vpath.c b/vpath.c
index 1bcba04..0c7dce3 100644 (file)
--- a/vpath.c
+++ b/vpath.c
@@ -1,5 +1,5 @@
 /* Implementation of pattern-matching file search paths for GNU Make.
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -52,7 +52,7 @@ static struct vpath *gpaths;
    variable.  */
 
 void
-build_vpath_lists ()
+build_vpath_lists (void)
 {
   register struct vpath *new = 0;
   register struct vpath *old, *nexto;
@@ -208,7 +208,7 @@ construct_vpath_list (char *pattern, char *dirpath)
 #endif
 
   /* Skip over any initial separators and blanks.  */
-  while (*dirpath == PATH_SEPARATOR_CHAR || isblank ((unsigned char)*dirpath))
+  while (STOP_SET (*dirpath, MAP_BLANK|MAP_PATHSEP))
     ++dirpath;
 
   /* Figure out the maximum number of VPATH entries and put it in
@@ -218,7 +218,7 @@ construct_vpath_list (char *pattern, char *dirpath)
   maxelem = 2;
   p = dirpath;
   while (*p != '\0')
-    if (*p++ == PATH_SEPARATOR_CHAR || isblank ((unsigned char)*p))
+    if (STOP_SET (*p++, MAP_BLANK|MAP_PATHSEP))
       ++maxelem;
 
   vpath = xmalloc (maxelem * sizeof (const char *));
@@ -244,7 +244,7 @@ construct_vpath_list (char *pattern, char *dirpath)
 #else
              && *p != PATH_SEPARATOR_CHAR
 #endif
-             && !isblank ((unsigned char)*p))
+             && !ISBLANK (*p))
         ++p;
 
       len = p - v;
@@ -266,7 +266,7 @@ construct_vpath_list (char *pattern, char *dirpath)
         }
 
       /* Skip over separators and blanks between entries.  */
-      while (*p == PATH_SEPARATOR_CHAR || isblank ((unsigned char)*p))
+      while (STOP_SET (*p, MAP_BLANK|MAP_PATHSEP))
         ++p;
     }
 
@@ -387,6 +387,10 @@ selective_vpath_search (struct vpath *path, const char *file,
         {
 #ifndef VMS
           *p++ = '/';
+#else
+          /* VMS: if this is not in VMS format, treat as Unix format */
+          if ((*p != ':') && (*p != ']') && (*p != '>'))
+            *p++ = '/';
 #endif
           memcpy (p, file, name_dplen);
           p += name_dplen;
@@ -405,6 +409,15 @@ selective_vpath_search (struct vpath *path, const char *file,
           memcpy (p + 1, filename, flen + 1);
         }
       else
+#else
+      /* VMS use a slash if no directory terminator present */
+      if (p != name && p[-1] != '/' && p[-1] != ':' &&
+          p[-1] != '>' && p[-1] != ']')
+        {
+          *p = '/';
+          memcpy (p + 1, filename, flen + 1);
+        }
+      else
 #endif
         memcpy (p, filename, flen + 1);
 
@@ -449,17 +462,20 @@ selective_vpath_search (struct vpath *path, const char *file,
              See if it actually exists.  */
 
 #ifdef VMS
-          exists_in_cache = exists = dir_file_exists_p (vpath[i], filename);
-#else
-          /* Clobber a null into the name at the last slash.
-             Now NAME is the name of the directory to look in.  */
-          *p = '\0';
-
-          /* We know the directory is in the hash table now because either
-             construct_vpath_list or the code just above put it there.
-             Does the file we seek exist in it?  */
-          exists_in_cache = exists = dir_file_exists_p (name, filename);
+          /* For VMS syntax just use the original vpath */
+          if (*p != '/')
+            exists_in_cache = exists = dir_file_exists_p (vpath[i], filename);
+          else
 #endif
+            {
+              /* Clobber a null into the name at the last slash.
+                 Now NAME is the name of the directory to look in.  */
+              *p = '\0';
+              /* We know the directory is in the hash table now because either
+                 construct_vpath_list or the code just above put it there.
+                 Does the file we seek exist in it?  */
+              exists_in_cache = exists = dir_file_exists_p (name, filename);
+            }
         }
 
       if (exists)
@@ -475,6 +491,10 @@ selective_vpath_search (struct vpath *path, const char *file,
 #ifndef VMS
           /* Put the slash back in NAME.  */
           *p = '/';
+#else
+          /* If the slash was removed, put it back */
+          if (*p == 0)
+            *p = '/';
 #endif
 
           if (exists_in_cache)  /* Makefile-mentioned file need not exist.  */
index a2c4063..b0b4734 100644 (file)
@@ -1,5 +1,5 @@
 # Makefile.am to create libw32.a for mingw32 host.
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
@@ -20,6 +20,6 @@ AUTOMAKE_OPTIONS = subdir-objects
 noinst_LIBRARIES = libw32.a
 
 libw32_a_SOURCES =  subproc/misc.c subproc/sub_proc.c subproc/w32err.c \
-                   compat/posixfcn.c pathstuff.c
+                   compat/posixfcn.c pathstuff.c w32os.c
 
 libw32_a_CPPFLAGS = -I$(srcdir)/include -I$(srcdir)/subproc -I$(top_srcdir)
index 4760541..60a0948 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # Makefile.am to create libw32.a for mingw32 host.
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
 # this program.  If not, see <http://www.gnu.org/licenses/>.
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -96,19 +106,19 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = w32
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/config/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/dospaths.m4 \
        $(top_srcdir)/config/gettext.m4 $(top_srcdir)/config/iconv.m4 \
        $(top_srcdir)/config/intlmacosx.m4 \
        $(top_srcdir)/config/lib-ld.m4 \
        $(top_srcdir)/config/lib-link.m4 \
-       $(top_srcdir)/config/lib-prefix.m4 $(top_srcdir)/config/nls.m4 \
+       $(top_srcdir)/config/lib-prefix.m4 \
+       $(top_srcdir)/config/longlong.m4 $(top_srcdir)/config/nls.m4 \
        $(top_srcdir)/config/po.m4 $(top_srcdir)/config/progtest.m4 \
        $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -126,7 +136,7 @@ am_libw32_a_OBJECTS = subproc/libw32_a-misc.$(OBJEXT) \
        subproc/libw32_a-sub_proc.$(OBJEXT) \
        subproc/libw32_a-w32err.$(OBJEXT) \
        compat/libw32_a-posixfcn.$(OBJEXT) \
-       libw32_a-pathstuff.$(OBJEXT)
+       libw32_a-pathstuff.$(OBJEXT) libw32_a-w32os.$(OBJEXT)
 libw32_a_OBJECTS = $(am_libw32_a_OBJECTS)
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -186,6 +196,7 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
@@ -258,6 +269,7 @@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
 REMOTE = @REMOTE@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
@@ -309,6 +321,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -320,7 +333,7 @@ top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = subdir-objects
 noinst_LIBRARIES = libw32.a
 libw32_a_SOURCES = subproc/misc.c subproc/sub_proc.c subproc/w32err.c \
-                   compat/posixfcn.c pathstuff.c
+                   compat/posixfcn.c pathstuff.c w32os.c
 
 libw32_a_CPPFLAGS = -I$(srcdir)/include -I$(srcdir)/subproc -I$(top_srcdir)
 all: all-am
@@ -339,7 +352,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign w32/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign w32/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -395,6 +407,7 @@ distclean-compile:
        -rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libw32_a-pathstuff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libw32_a-w32os.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/libw32_a-posixfcn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@subproc/$(DEPDIR)/libw32_a-misc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@subproc/$(DEPDIR)/libw32_a-sub_proc.Po@am__quote@
@@ -486,6 +499,20 @@ libw32_a-pathstuff.obj: pathstuff.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-pathstuff.obj `if test -f 'pathstuff.c'; then $(CYGPATH_W) 'pathstuff.c'; else $(CYGPATH_W) '$(srcdir)/pathstuff.c'; fi`
 
+libw32_a-w32os.o: w32os.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-w32os.o -MD -MP -MF $(DEPDIR)/libw32_a-w32os.Tpo -c -o libw32_a-w32os.o `test -f 'w32os.c' || echo '$(srcdir)/'`w32os.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libw32_a-w32os.Tpo $(DEPDIR)/libw32_a-w32os.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='w32os.c' object='libw32_a-w32os.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-w32os.o `test -f 'w32os.c' || echo '$(srcdir)/'`w32os.c
+
+libw32_a-w32os.obj: w32os.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-w32os.obj -MD -MP -MF $(DEPDIR)/libw32_a-w32os.Tpo -c -o libw32_a-w32os.obj `if test -f 'w32os.c'; then $(CYGPATH_W) 'w32os.c'; else $(CYGPATH_W) '$(srcdir)/w32os.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libw32_a-w32os.Tpo $(DEPDIR)/libw32_a-w32os.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='w32os.c' object='libw32_a-w32os.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-w32os.obj `if test -f 'w32os.c'; then $(CYGPATH_W) 'w32os.c'; else $(CYGPATH_W) '$(srcdir)/w32os.c'; fi`
+
 ID: $(am__tagged_files)
        $(am__define_uniq_tagged_files); mkid -fID $$unique
 tags: tags-am
@@ -690,6 +717,8 @@ uninstall-am:
        mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
        uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
index 56407dd..17f7d5f 100644 (file)
@@ -1,5 +1,5 @@
 /* Directory entry code for Window platforms.
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index b366399..c760cc8 100644 (file)
@@ -1,6 +1,6 @@
 /* Replacements for Posix functions and Posix functionality for MS-Windows.
 
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 13308de..bae8449 100644 (file)
@@ -1,5 +1,5 @@
 /* Windows version of dirent.h
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index c64ac7b..5a2ae28 100644 (file)
@@ -1,5 +1,5 @@
 /* dlfcn.h replacement for MS-Windows build.
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index fb03f12..923dc00 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for Windows path manipulation.
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 1e1b213..4afa4b4 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for Windows process invocation.
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -32,11 +32,11 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 EXTERN_DECL(HANDLE process_init, (VOID_DECL));
 EXTERN_DECL(HANDLE process_init_fd, (HANDLE stdinh, HANDLE stdouth,
-        HANDLE stderrh));
+                                     HANDLE stderrh));
 EXTERN_DECL(long process_begin, (HANDLE proc, char **argv, char **envp,
-        char *exec_path, char *as_user));
+                                 char *exec_path, char *as_user));
 EXTERN_DECL(long process_pipe_io, (HANDLE proc, char *stdin_data,
-        int stdin_data_len));
+                                   int stdin_data_len));
 EXTERN_DECL(long process_file_io, (HANDLE proc));
 EXTERN_DECL(void process_cleanup, (HANDLE proc));
 EXTERN_DECL(HANDLE process_wait_for_any, (int block, DWORD* pdwWaitStatus));
@@ -45,6 +45,7 @@ EXTERN_DECL(HANDLE process_easy, (char** argv, char** env,
                                   int outfd, int errfd));
 EXTERN_DECL(BOOL process_kill, (HANDLE proc, int signal));
 EXTERN_DECL(int process_used_slots, (VOID_DECL));
+EXTERN_DECL(DWORD process_set_handles, (HANDLE *handles));
 
 /* support routines */
 EXTERN_DECL(long process_errno, (HANDLE proc));
@@ -58,14 +59,4 @@ EXTERN_DECL(int process_errcnt, (HANDLE proc));
 EXTERN_DECL(void process_pipes, (HANDLE proc, int pipes[3]));
 EXTERN_DECL(void process_noinherit, (int fildes));
 
-/* jobserver routines */
-EXTERN_DECL(int open_jobserver_semaphore, (const char* name));
-EXTERN_DECL(int create_jobserver_semaphore, (int tokens));
-EXTERN_DECL(void free_jobserver_semaphore, (VOID_DECL));
-EXTERN_DECL(int acquire_jobserver_semaphore, (VOID_DECL));
-EXTERN_DECL(int release_jobserver_semaphore, (VOID_DECL));
-EXTERN_DECL(int has_jobserver_semaphore, (VOID_DECL));
-EXTERN_DECL(char* get_jobserver_semaphore_name, (VOID_DECL));
-EXTERN_DECL(int wait_for_semaphore_or_child_process, (VOID_DECL));
-
 #endif
index 7d72226..b4292f2 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for Windows error handling.
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 55332ab..2c612f7 100644 (file)
@@ -1,5 +1,5 @@
 /* Path conversion for Windows pathnames.
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index ebf516d..325e55c 100644 (file)
@@ -1,7 +1,7 @@
 # NOTE: If you have no 'make' program at all to process this makefile, run
 # 'build.bat' instead.
 #
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2016 Free Software Foundation, Inc.
 # This file is part of GNU Make.
 #
 # GNU Make is free software; you can redistribute it and/or modify it under
diff --git a/w32/subproc/build.bat b/w32/subproc/build.bat
deleted file mode 100644 (file)
index f8604ce..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-@if "%COMPILER%" == "gcc" GoTo GCCBuild\r
-if not exist .\WinDebug\nul mkdir .\WinDebug\r
-cl.exe /nologo /MT /W4 /GX /Z7 /YX /Od /I .. /I . /I ../include /I ../.. /D WIN32 /D WINDOWS32 /D _DEBUG /D _WINDOWS /FR.\WinDebug/ /Fp.\WinDebug/subproc.pch /Fo.\WinDebug/ /c misc.c\r
-cl.exe /nologo /MT /W4 /GX /Z7 /YX /Od /I .. /I . /I ../include /I ../.. /D WIN32 /D WINDOWS32 /D _DEBUG /D _WINDOWS /FR.\WinDebug/ /Fp.\WinDebug/subproc.pch /Fo.\WinDebug/ /c sub_proc.c\r
-cl.exe /nologo /MT /W4 /GX /Z7 /YX /Od /I .. /I . /I ../include /I ../.. /D WIN32 /D WINDOWS32 /D _DEBUG /D _WINDOWS /FR.\WinDebug/ /Fp.\WinDebug/subproc.pch /Fo.\WinDebug/ /c w32err.c\r
-lib.exe /NOLOGO /OUT:.\WinDebug\subproc.lib  .\WinDebug/misc.obj  .\WinDebug/sub_proc.obj  .\WinDebug/w32err.obj\r
-if not exist .\WinRel\nul mkdir .\WinRel\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I .. /I . /I ../include /I ../.. /D WIN32 /D WINDOWS32 /D NDEBUG /D _WINDOWS /FR.\WinRel/ /Fp.\WinRel/subproc.pch /Fo.\WinRel/ /c misc.c\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I .. /I . /I ../include /I ../.. /D WIN32 /D WINDOWS32 /D NDEBUG /D _WINDOWS /FR.\WinRel/ /Fp.\WinRel/subproc.pch /Fo.\WinRel/ /c sub_proc.c\r
-cl.exe /nologo /MT /W4 /GX /YX /O2 /I .. /I . /I ../include /I ../.. /D WIN32 /D WINDOWS32 /D NDEBUG /D _WINDOWS /FR.\WinRel/ /Fp.\WinRel/subproc.pch /Fo.\WinRel/ /c w32err.c\r
-lib.exe /NOLOGO /OUT:.\WinRel\subproc.lib  .\WinRel/misc.obj  .\WinRel/sub_proc.obj  .\WinRel/w32err.obj\r
-GoTo BuildEnd\r
-:GCCBuild\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I.. -I. -I../include -I../.. -DWINDOWS32 -c misc.c -o ../../w32_misc.o\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I.. -I. -I../include -I../.. -DWINDOWS32 -c sub_proc.c -o ../../sub_proc.o\r
-gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I.. -I. -I../include -I../.. -DWINDOWS32 -c w32err.c -o ../../w32err.o\r
-:BuildEnd\r
-\r
-@echo off\r
-rem Copyright (C) 1996-2014 Free Software Foundation, Inc.\r
-rem This file is part of GNU Make.\r
-rem\r
-rem GNU Make is free software; you can redistribute it and/or modify it under\r
-rem the terms of the GNU General Public License as published by the Free\r
-rem Software Foundation; either version 3 of the License, or (at your option)\r
-rem any later version.\r
-rem\r
-rem GNU Make is distributed in the hope that it will be useful, but WITHOUT\r
-rem ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
-rem FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for.\r
-rem more details.\r
-rem\r
-rem You should have received a copy of the GNU General Public License along\r
-rem with this program.  If not, see <http://www.gnu.org/licenses/>.\r
index 3f3bdf8..8b17413 100644 (file)
@@ -1,5 +1,5 @@
 /* Process handling for Windows
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 1e4054c..7ccb5ea 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for Windows
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
index 5496c7e..d34e840 100644 (file)
@@ -1,5 +1,5 @@
 /* Process handling for Windows.
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -61,124 +61,26 @@ static sub_process *proc_array[MAXIMUM_WAIT_OBJECTS];
 static int proc_index = 0;
 static int fake_exits_pending = 0;
 
-/* Windows jobserver implementation variables */
-static char jobserver_semaphore_name[MAX_PATH + 1];
-static HANDLE jobserver_semaphore = NULL;
 
-/* Open existing jobserver semaphore */
-int open_jobserver_semaphore(const char* name)
-{
-    jobserver_semaphore = OpenSemaphore(
-        SEMAPHORE_ALL_ACCESS,   // Semaphore access setting
-        FALSE,                  // Child processes DON'T inherit
-        name);                  // Semaphore name
-
-    if (jobserver_semaphore == NULL)
-        return 0;
-
-    return 1;
-}
-
-/* Create new jobserver semaphore */
-int create_jobserver_semaphore(int tokens)
-{
-    sprintf(jobserver_semaphore_name, "gmake_semaphore_%d", _getpid());
-
-    jobserver_semaphore = CreateSemaphore(
-        NULL,                           // Use default security descriptor
-        tokens,                         // Initial count
-        tokens,                         // Maximum count
-        jobserver_semaphore_name);      // Semaphore name
-
-    if (jobserver_semaphore == NULL)
-        return 0;
-
-    return 1;
-}
-
-/* Close jobserver semaphore */
-void free_jobserver_semaphore()
-{
-    if (jobserver_semaphore != NULL)
-    {
-        CloseHandle(jobserver_semaphore);
-        jobserver_semaphore = NULL;
-    }
-}
-
-/* Decrement semaphore count */
-int acquire_jobserver_semaphore()
-{
-    DWORD dwEvent = WaitForSingleObject(
-        jobserver_semaphore,    // Handle to semaphore
-        0);                     // DON'T wait on semaphore
-
-    return (dwEvent == WAIT_OBJECT_0);
-}
-
-/* Increment semaphore count */
-int release_jobserver_semaphore()
-{
-    BOOL bResult = ReleaseSemaphore(
-        jobserver_semaphore,    // handle to semaphore
-        1,                      // increase count by one
-        NULL);                  // not interested in previous count
-
-    return (bResult);
-}
-
-int has_jobserver_semaphore()
-{
-    return (jobserver_semaphore != NULL);
-}
-
-char* get_jobserver_semaphore_name()
-{
-    return (jobserver_semaphore_name);
-}
-
-/* Wait for either the jobserver semaphore to become signalled or one of our
- * child processes to terminate.
+/*
+ * Fill a HANDLE list with handles to wait for.
  */
-int wait_for_semaphore_or_child_process()
+DWORD
+process_set_handles(HANDLE *handles)
 {
-    HANDLE handles[MAXIMUM_WAIT_OBJECTS];
-    DWORD dwHandleCount = 1;
-    DWORD dwEvent;
+    DWORD count = 0;
     int i;
 
-    /* Add jobserver semaphore to first slot. */
-    handles[0] = jobserver_semaphore;
-
     /* Build array of handles to wait for */
-    for (i = 0; i < proc_index; i++)
-    {
+    for (i = 0; i < proc_index; i++) {
         /* Don't wait on child processes that have already finished */
         if (fake_exits_pending && proc_array[i]->exit_code)
             continue;
 
-        handles[dwHandleCount++] = (HANDLE) proc_array[i]->pid;
+        handles[count++] = (HANDLE) proc_array[i]->pid;
     }
 
-    dwEvent = WaitForMultipleObjects(
-        dwHandleCount,  // number of objects in array
-        handles,        // array of objects
-        FALSE,          // wait for any object
-        INFINITE);      // wait until object is signalled
-
-    switch(dwEvent)
-    {
-      case WAIT_FAILED:
-        return -1;
-
-      case WAIT_OBJECT_0:
-        /* Indicate that the semaphore was signalled */
-        return 1;
-
-      default:
-        /* Assume that one or more of the child processes terminated. */
-        return 0;
-    }
+    return count;
 }
 
 /*
@@ -721,9 +623,26 @@ process_begin(
                 if (!shell_name
                     && batch_file_with_spaces(exec_fname)
                     && _stricmp(exec_path, argv[0]) == 0) {
+                        char *new_argv, *p;
+                        char **argvi;
+                        int arglen, i;
                         pass_null_exec_path = 1;
+                        /* Rewrite argv[] replacing argv[0] with exec_fname.  */
+                        for (argvi = argv + 1, arglen = strlen(exec_fname) + 1;
+                             *argvi;
+                             argvi++) {
+                                arglen += strlen(*argvi) + 1;
+                        }
+                        new_argv = xmalloc(arglen);
+                        p = strcpy(new_argv, exec_fname) + strlen(exec_fname) + 1;
+                        for (argvi = argv + 1, i = 1; *argvi; argvi++, i++) {
+                                strcpy(p, *argvi);
+                                argv[i] = p;
+                                p += strlen(*argvi) + 1;
+                        }
+                        argv[i] = NULL;
                         free (argv[0]);
-                        argv[0] = xstrdup(exec_fname);
+                        argv[0] = new_argv;
                 }
                 command_line = make_command_line( shell_name, exec_fname, argv);
         }
@@ -736,14 +655,15 @@ process_begin(
 
         if (envp) {
                 if (arr2envblk(envp, &envblk, &envsize_needed) == FALSE) {
-                        pproc->last_err = 0;
                         pproc->lerrno = E_NO_MEM;
                         free( command_line );
-                        if (pproc->last_err == ERROR_INVALID_PARAMETER
+                        if ((pproc->last_err == ERROR_INVALID_PARAMETER
+                             || pproc->last_err == ERROR_MORE_DATA)
                             && envsize_needed > 32*1024) {
                                 fprintf (stderr, "CreateProcess failed, probably because environment is too large (%d bytes).\n",
                                          envsize_needed);
                         }
+                        pproc->last_err = 0;
                         return(-1);
                 }
         }
@@ -757,6 +677,7 @@ process_begin(
         /*
          *  Set up inherited stdin, stdout, stderr for child
          */
+        memset(&startInfo, '\0', sizeof(startInfo));
         GetStartupInfo(&startInfo);
         startInfo.dwFlags = STARTF_USESTDHANDLES;
         startInfo.lpReserved = 0;
index 9ff4f4c..14eebed 100644 (file)
@@ -1,5 +1,5 @@
 /* Error handling for Windows
-Copyright (C) 1996-2014 Free Software Foundation, Inc.
+Copyright (C) 1996-2016 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
diff --git a/w32/w32os.c b/w32/w32os.c
new file mode 100644 (file)
index 0000000..533b910
--- /dev/null
@@ -0,0 +1,198 @@
+/* Windows32-based operating system interface for GNU Make.
+Copyright (C) 2016 Free Software Foundation, Inc.
+This file is part of GNU Make.
+
+GNU Make is free software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 3 of the License, or (at your option) any later
+version.
+
+GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "makeint.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include <windows.h>
+#include <process.h>
+#include <io.h>
+#include "pathstuff.h"
+#include "sub_proc.h"
+#include "w32err.h"
+#include "os.h"
+#include "debug.h"
+
+/* This section provides OS-specific functions to support the jobserver.  */
+
+static char jobserver_semaphore_name[MAX_PATH + 1];
+static HANDLE jobserver_semaphore = NULL;
+
+unsigned int
+jobserver_setup (int slots)
+{
+  /* sub_proc.c cannot wait for more than MAXIMUM_WAIT_OBJECTS objects
+   * and one of them is the job-server semaphore object.  Limit the
+   * number of available job slots to (MAXIMUM_WAIT_OBJECTS - 1). */
+
+  if (slots >= MAXIMUM_WAIT_OBJECTS)
+    {
+      slots = MAXIMUM_WAIT_OBJECTS - 1;
+      DB (DB_JOBS, (_("Jobserver slots limited to %d\n"), slots));
+    }
+
+  sprintf (jobserver_semaphore_name, "gmake_semaphore_%d", _getpid ());
+
+  jobserver_semaphore = CreateSemaphore (
+      NULL,                           /* Use default security descriptor */
+      slots,                          /* Initial count */
+      slots,                          /* Maximum count */
+      jobserver_semaphore_name);      /* Semaphore name */
+
+  if (jobserver_semaphore == NULL)
+    {
+      DWORD err = GetLastError ();
+      const char *estr = map_windows32_error_to_string (err);
+      ONS (fatal, NILF,
+           _("creating jobserver semaphore: (Error %ld: %s)"), err, estr);
+    }
+
+  return 1;
+}
+
+unsigned int
+jobserver_parse_auth (const char *auth)
+{
+  jobserver_semaphore = OpenSemaphore (
+      SEMAPHORE_ALL_ACCESS,   /* Semaphore access setting */
+      FALSE,                  /* Child processes DON'T inherit */
+      auth);                  /* Semaphore name */
+
+  if (jobserver_semaphore == NULL)
+    {
+      DWORD err = GetLastError ();
+      const char *estr = map_windows32_error_to_string (err);
+      fatal (NILF, strlen (auth) + INTSTR_LENGTH + strlen (estr),
+             _("internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"),
+             auth, err, estr);
+    }
+  DB (DB_JOBS, (_("Jobserver client (semaphore %s)\n"), auth));
+
+  return 1;
+}
+
+char *
+jobserver_get_auth ()
+{
+  return xstrdup (jobserver_semaphore_name);
+}
+
+unsigned int
+jobserver_enabled ()
+{
+  return jobserver_semaphore != NULL;
+}
+
+/* Close jobserver semaphore */
+void
+jobserver_clear ()
+{
+  if (jobserver_semaphore != NULL)
+    {
+      CloseHandle (jobserver_semaphore);
+      jobserver_semaphore = NULL;
+    }
+}
+
+void
+jobserver_release (int is_fatal)
+{
+  if (! ReleaseSemaphore (
+          jobserver_semaphore,    /* handle to semaphore */
+          1,                      /* increase count by one */
+          NULL))                  /* not interested in previous count */
+    {
+      if (is_fatal)
+        {
+          DWORD err = GetLastError ();
+          const char *estr = map_windows32_error_to_string (err);
+          ONS (fatal, NILF,
+               _("release jobserver semaphore: (Error %ld: %s)"), err, estr);
+        }
+      perror_with_name ("release_jobserver_semaphore", "");
+    }
+}
+
+unsigned int
+jobserver_acquire_all ()
+{
+  unsigned int tokens = 0;
+  while (1)
+    {
+      DWORD dwEvent = WaitForSingleObject (
+          jobserver_semaphore,    /* Handle to semaphore */
+          0);                     /* DON'T wait on semaphore */
+
+      if (dwEvent != WAIT_OBJECT_0)
+        return tokens;
+
+      ++tokens;
+    }
+}
+
+void
+jobserver_signal ()
+{
+}
+
+void jobserver_pre_child (int recursive)
+{
+}
+
+void jobserver_post_child (int recursive)
+{
+}
+
+void
+jobserver_pre_acquire ()
+{
+}
+
+/* Returns 1 if we got a token, or 0 if a child has completed.
+   The Windows implementation doesn't support load detection.  */
+unsigned int
+jobserver_acquire (int timeout)
+{
+    HANDLE handles[MAXIMUM_WAIT_OBJECTS];
+    DWORD dwHandleCount;
+    DWORD dwEvent;
+
+    /* Add jobserver semaphore to first slot. */
+    handles[0] = jobserver_semaphore;
+
+    /* Build array of handles to wait for.  */
+    dwHandleCount = 1 + process_set_handles (&handles[1]);
+
+    dwEvent = WaitForMultipleObjects (
+        dwHandleCount,  /* number of objects in array */
+        handles,        /* array of objects */
+        FALSE,          /* wait for any object */
+        INFINITE);      /* wait until object is signalled */
+
+    if (dwEvent == WAIT_FAILED)
+      {
+        DWORD err = GetLastError ();
+        const char *estr = map_windows32_error_to_string (err);
+        ONS (fatal, NILF,
+             _("semaphore or child process wait: (Error %ld: %s)"),
+             err, estr);
+      }
+
+    /* WAIT_OBJECT_0 indicates that the semaphore was signalled.  */
+    return dwEvent == WAIT_OBJECT_0;
+}